ndis.h 160 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992
  1. /*
  2. * ndis.h
  3. *
  4. * Network Device Interface Specification definitions
  5. *
  6. * This file is part of the ReactOS DDK package.
  7. *
  8. * Contributors:
  9. * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10. *
  11. * THIS SOFTWARE IS NOT COPYRIGHTED
  12. *
  13. * This source code is offered for use in the public domain. You may
  14. * use, modify or distribute it freely.
  15. *
  16. * This code is distributed in the hope that it will be useful but
  17. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18. * DISCLAIMED. This includes but is not limited to warranties of
  19. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20. *
  21. * DEFINES: i386 - Target platform is i386
  22. * NDIS_WRAPPER - Define only for NDIS library
  23. * NDIS_MINIPORT_DRIVER - Define only for NDIS miniport drivers
  24. * NDIS40 - Use NDIS 4.0 structures by default
  25. * NDIS50 - Use NDIS 5.0 structures by default
  26. * NDIS51 - Use NDIS 5.1 structures by default
  27. * NDIS40_MINIPORT - Building NDIS 4.0 miniport driver
  28. * NDIS50_MINIPORT - Building NDIS 5.0 miniport driver
  29. * NDIS51_MINIPORT - Building NDIS 5.1 miniport driver
  30. */
  31. #ifndef _NDIS_
  32. #define _NDIS_
  33. #ifndef NDIS_WDM
  34. #define NDIS_WDM 0
  35. #endif
  36. #include "ntddk.h"
  37. #include "netpnp.h"
  38. #include "ntstatus.h"
  39. #include "netevent.h"
  40. #include <qos.h>
  41. typedef int NDIS_STATUS, *PNDIS_STATUS;
  42. #include "ntddndis.h"
  43. #if !defined(_WINDEF_H)
  44. typedef unsigned int UINT, *PUINT;
  45. #endif
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49. #ifndef __NET_PNP__
  50. #define __NET_PNP__
  51. typedef enum _NET_DEVICE_POWER_STATE {
  52. NetDeviceStateUnspecified = 0,
  53. NetDeviceStateD0,
  54. NetDeviceStateD1,
  55. NetDeviceStateD2,
  56. NetDeviceStateD3,
  57. NetDeviceStateMaximum
  58. } NET_DEVICE_POWER_STATE, *PNET_DEVICE_POWER_STATE;
  59. typedef enum _NET_PNP_EVENT_CODE {
  60. NetEventSetPower,
  61. NetEventQueryPower,
  62. NetEventQueryRemoveDevice,
  63. NetEventCancelRemoveDevice,
  64. NetEventReconfigure,
  65. NetEventBindList,
  66. NetEventBindsComplete,
  67. NetEventPnPCapabilities,
  68. NetEventPause,
  69. NetEventRestart,
  70. NetEventPortActivation,
  71. NetEventPortDeactivation,
  72. NetEventIMReEnableDevice,
  73. NetEventMaximum
  74. } NET_PNP_EVENT_CODE, *PNET_PNP_EVENT_CODE;
  75. typedef struct _NET_PNP_EVENT {
  76. NET_PNP_EVENT_CODE NetEvent;
  77. PVOID Buffer;
  78. ULONG BufferLength;
  79. ULONG_PTR NdisReserved[4];
  80. ULONG_PTR TransportReserved[4];
  81. ULONG_PTR TdiReserved[4];
  82. ULONG_PTR TdiClientReserved[4];
  83. } NET_PNP_EVENT, *PNET_PNP_EVENT;
  84. #endif /* __NET_PNP__ */
  85. #if !defined(NDIS_WRAPPER)
  86. #if (defined(NDIS_MINIPORT_MAJOR_VERSION) || \
  87. (defined(NDIS_MINIPORT_MINOR_VERSION)) || \
  88. (defined(NDIS_PROTOCOL_MAJOR_VERSION)) || \
  89. (defined(NDIS_PROTOCOL_MINOR_VERSION)) || \
  90. (defined(NDIS_FILTER_MAJOR_VERSION)) || \
  91. (defined(NDIS_FILTER_MINOR_VERSION)))
  92. #error "Driver should not redefine NDIS reserved macros"
  93. #endif
  94. #if defined(NDIS_MINIPORT_DRIVER)
  95. #if defined(NDIS620_MINIPORT)
  96. #define NDIS_MINIPORT_MAJOR_VERSION 6
  97. #define NDIS_MINIPORT_MINOR_VERSION 20
  98. #elif defined(NDIS61_MINIPORT)
  99. #define NDIS_MINIPORT_MAJOR_VERSION 6
  100. #define NDIS_MINIPORT_MINOR_VERSION 1
  101. #elif defined(NDIS60_MINIPORT)
  102. #define NDIS_MINIPORT_MAJOR_VERSION 6
  103. #define NDIS_MINIPORT_MINOR_VERSION 0
  104. #elif defined(NDIS51_MINIPORT)
  105. #define NDIS_MINIPORT_MAJOR_VERSION 5
  106. #define NDIS_MINIPORT_MINOR_VERSION 1
  107. #elif defined(NDIS50_MINIPORT)
  108. #define NDIS_MINIPORT_MAJOR_VERSION 5
  109. #define NDIS_MINIPORT_MINOR_VERSION 0
  110. #else
  111. #error "Only NDIS miniport drivers with version >= 5 are supported"
  112. #endif
  113. #if ((NDIS_MINIPORT_MAJOR_VERSION == 6) && \
  114. (NDIS_MINIPORT_MINOR_VERSION != 20) && \
  115. (NDIS_MINIPORT_MINOR_VERSION != 1) && \
  116. (NDIS_MINIPORT_MINOR_VERSION != 0))
  117. #error "Invalid miniport major/minor version combination"
  118. #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
  119. (NDIS_MINIPORT_MINOR_VERSION != 1) && \
  120. (NDIS_MINIPORT_MINOR_VERSION != 0))
  121. #error "Invalid miniport major/minor version combination"
  122. #endif
  123. #if (NDIS_MINIPORT_MAJOR_VERSION == 6) && \
  124. ((NDIS_MINIPORT_MINOR_VERSION == 20 && NTDDI_VERSION < NTDDI_WIN7) || \
  125. (NDIS_MINIPORT_MINOR_VERSION == 1 && NTDDI_VERSION < NTDDI_VISTA) || \
  126. (NDIS_MINIPORT_MINOR_VERSION == 0 && NTDDI_VERSION < NTDDI_VISTA))
  127. #error "Wrong NDIS/DDI version"
  128. #elif ((NDIS_MINIPORT_MAJOR_VERSION == 5) && \
  129. (((NDIS_MINIPORT_MINOR_VERSION == 1) && (NTDDI_VERSION < NTDDI_WINXP)) || \
  130. ((NDIS_MINIPORT_MINOR_VERSION == 0) && (NTDDI_VERSION < NTDDI_WIN2K))))
  131. #error "Wrong NDIS/DDI version"
  132. #endif
  133. #endif /* defined(NDIS_MINIPORT_DRIVER) */
  134. #if defined(NDIS30)
  135. #error "Only NDIS Protocol drivers version 4 or later are supported"
  136. #endif
  137. #if defined(NDIS620)
  138. #define NDIS_PROTOCOL_MAJOR_VERSION 6
  139. #define NDIS_PROTOCOL_MINOR_VERSION 20
  140. #define NDIS_FILTER_MAJOR_VERSION 6
  141. #define NDIS_FILTER_MINOR_VERSION 20
  142. #elif defined(NDIS61)
  143. #define NDIS_PROTOCOL_MAJOR_VERSION 6
  144. #define NDIS_PROTOCOL_MINOR_VERSION 1
  145. #define NDIS_FILTER_MAJOR_VERSION 6
  146. #define NDIS_FILTER_MINOR_VERSION 1
  147. #elif defined(NDIS60)
  148. #define NDIS_PROTOCOL_MAJOR_VERSION 6
  149. #define NDIS_PROTOCOL_MINOR_VERSION 0
  150. #define NDIS_FILTER_MAJOR_VERSION 6
  151. #define NDIS_FILTER_MINOR_VERSION 0
  152. #elif defined(NDIS51)
  153. #define NDIS_PROTOCOL_MAJOR_VERSION 5
  154. #define NDIS_PROTOCOL_MINOR_VERSION 1
  155. #elif defined(NDIS50)
  156. #define NDIS_PROTOCOL_MAJOR_VERSION 5
  157. #define NDIS_PROTOCOL_MINOR_VERSION 0
  158. #elif defined(NDIS40)
  159. #define NDIS_PROTOCOL_MAJOR_VERSION 4
  160. #define NDIS_PROTOCOL_MINOR_VERSION 0
  161. #endif
  162. #if !defined(NDIS_MINIPORT_DRIVER) && !defined(NDIS_PROTOCOL_MAJOR_VERSION)
  163. #define NDIS40
  164. #define NDIS_PROTOCOL_MAJOR_VERSION 4
  165. #define NDIS_PROTOCOL_MINOR_VERSION 0
  166. #endif
  167. #if defined(NDIS_FILTER_MAJOR_VERSION)
  168. #if ((NDIS_FILTER_MAJOR_VERSION == 6) && \
  169. (NDIS_FILTER_MINOR_VERSION != 20) && \
  170. (NDIS_FILTER_MINOR_VERSION != 1) && \
  171. (NDIS_FILTER_MINOR_VERSION != 0))
  172. #error "Invalid Filter version"
  173. #endif
  174. #endif /* defined(NDIS_FILTER_MAJOR_VERSION) */
  175. #if defined(NDIS_PROTOCOL_MAJOR_VERSION)
  176. #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && \
  177. (NDIS_PROTOCOL_MINOR_VERSION != 20) && \
  178. (NDIS_PROTOCOL_MINOR_VERSION != 1) && \
  179. (NDIS_PROTOCOL_MINOR_VERSION != 0))
  180. #error "Invalid Protocol version"
  181. #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 5) && \
  182. (NDIS_PROTOCOL_MINOR_VERSION != 1) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
  183. #error "Invalid Protocol version"
  184. #elif ((NDIS_PROTOCOL_MAJOR_VERSION == 4) && (NDIS_PROTOCOL_MINOR_VERSION != 0))
  185. #error "Invalid Protocol major/minor version"
  186. #endif
  187. #if ((NDIS_PROTOCOL_MAJOR_VERSION == 6) && (NTDDI_VERSION < NTDDI_VISTA))
  188. #error "Wrong NDIS/DDI version"
  189. #endif
  190. #endif /* defined(NDIS_PROTOCOL_MAJOR_VERSION) */
  191. #endif /* !defined(NDIS_WRAPPER) */
  192. #if !defined(NDIS_LEGACY_MINIPORT)
  193. #if ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
  194. #define NDIS_LEGACY_MINIPORT 1
  195. #else
  196. #define NDIS_LEGACY_MINIPORT 0
  197. #endif
  198. #endif /* !defined(NDIS_LEGACY_MINIPORT) */
  199. #if !defined(NDIS_LEGACY_PROTOCOL)
  200. #if ((defined(NDIS_PROTOCOL_MAJOR_VERSION) && (NDIS_PROTOCOL_MAJOR_VERSION < 6)) || NDIS_WRAPPER)
  201. #define NDIS_LEGACY_PROTOCOL 1
  202. #else
  203. #define NDIS_LEGACY_PROTOCOL 0
  204. #endif
  205. #endif /* !defined(NDIS_LEGACY_PROTOCOL) */
  206. #if !defined(NDIS_LEGACY_DRIVER)
  207. #if (NDIS_LEGACY_MINIPORT || NDIS_LEGACY_PROTOCOL || NDIS_WRAPPER)
  208. #define NDIS_LEGACY_DRIVER 1
  209. #else
  210. #define NDIS_LEGACY_DRIVER 0
  211. #endif
  212. #endif /* !defined(NDIS_LEGACY_DRIVER) */
  213. #if !defined(NDIS_SUPPORT_NDIS6)
  214. #if ((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) || \
  215. (defined (NDIS60)) || NDIS_WRAPPER)
  216. #define NDIS_SUPPORT_NDIS6 1
  217. #else
  218. #define NDIS_SUPPORT_NDIS6 0
  219. #endif
  220. #endif /* !defined(NDIS_SUPPORT_NDIS6) */
  221. #if !defined(NDIS_SUPPORT_NDIS61)
  222. #if (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
  223. (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 1))) || \
  224. (defined (NDIS61)) || NDIS_WRAPPER)
  225. #define NDIS_SUPPORT_NDIS61 1
  226. #else
  227. #define NDIS_SUPPORT_NDIS61 0
  228. #endif
  229. #endif /* !defined(NDIS_SUPPORT_NDIS61) */
  230. #if !defined(NDIS_SUPPORT_NDIS620)
  231. #if (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
  232. (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 20))) || \
  233. (defined (NDIS620)) || NDIS_WRAPPER)
  234. #define NDIS_SUPPORT_NDIS620 1
  235. #else
  236. #define NDIS_SUPPORT_NDIS620 0
  237. #endif
  238. #endif /* !defined(NDIS_SUPPORT_NDIS620) */
  239. #if (NDIS_SUPPORT_NDIS620)
  240. #undef NDIS_SUPPORT_NDIS61
  241. #define NDIS_SUPPORT_NDIS61 1
  242. #endif
  243. #if (NDIS_SUPPORT_NDIS61)
  244. #undef NDIS_SUPPORT_NDIS6
  245. #define NDIS_SUPPORT_NDIS6 1
  246. #endif
  247. #if defined(NDIS61_MINIPORT) || defined(NDIS60_MINIPORT) || defined(NDIS61) || \
  248. defined(NDIS60) || defined(NDIS_WRAPPER) || defined(NDIS_LEGACY_DRIVER)
  249. #define NDIS_SUPPORT_60_COMPATIBLE_API 1
  250. #else
  251. #define NDIS_SUPPORT_60_COMPATIBLE_API 0
  252. #endif
  253. #if defined(NDIS_WRAPPER)
  254. #define NDISAPI
  255. #else
  256. #define NDISAPI DECLSPEC_IMPORT
  257. #endif
  258. typedef PVOID QUEUED_CLOSE; //FIXME : Doesn't exist in public headers
  259. typedef struct _X_FILTER FDDI_FILTER, *PFDDI_FILTER;
  260. typedef struct _X_FILTER TR_FILTER, *PTR_FILTER;
  261. typedef struct _X_FILTER NULL_FILTER, *PNULL_FILTER;
  262. typedef struct _NDIS_MINIPORT_BLOCK NDIS_MINIPORT_BLOCK, *PNDIS_MINIPORT_BLOCK;
  263. typedef struct _REFERENCE {
  264. KSPIN_LOCK SpinLock;
  265. USHORT ReferenceCount;
  266. BOOLEAN Closing;
  267. } REFERENCE, *PREFERENCE;
  268. /* NDIS base types */
  269. typedef struct _NDIS_SPIN_LOCK {
  270. KSPIN_LOCK SpinLock;
  271. KIRQL OldIrql;
  272. } NDIS_SPIN_LOCK, *PNDIS_SPIN_LOCK;
  273. typedef struct _NDIS_EVENT {
  274. KEVENT Event;
  275. } NDIS_EVENT, *PNDIS_EVENT;
  276. typedef PVOID NDIS_HANDLE, *PNDIS_HANDLE;
  277. typedef ANSI_STRING NDIS_ANSI_STRING, *PNDIS_ANSI_STRING;
  278. typedef UNICODE_STRING NDIS_STRING, *PNDIS_STRING;
  279. typedef MDL NDIS_BUFFER, *PNDIS_BUFFER;
  280. /* NDIS_STATUS constants */
  281. #define NDIS_STATUS_SUCCESS ((NDIS_STATUS)STATUS_SUCCESS)
  282. #define NDIS_STATUS_PENDING ((NDIS_STATUS)STATUS_PENDING)
  283. #define NDIS_STATUS_NOT_RECOGNIZED ((NDIS_STATUS)0x00010001L)
  284. #define NDIS_STATUS_NOT_COPIED ((NDIS_STATUS)0x00010002L)
  285. #define NDIS_STATUS_NOT_ACCEPTED ((NDIS_STATUS)0x00010003L)
  286. #define NDIS_STATUS_CALL_ACTIVE ((NDIS_STATUS)0x00010007L)
  287. #define NDIS_STATUS_INDICATION_REQUIRED ((NDIS_STATUS)STATUS_NDIS_INDICATION_REQUIRED)
  288. #define NDIS_STATUS_ONLINE ((NDIS_STATUS)0x40010003L)
  289. #define NDIS_STATUS_RESET_START ((NDIS_STATUS)0x40010004L)
  290. #define NDIS_STATUS_RESET_END ((NDIS_STATUS)0x40010005L)
  291. #define NDIS_STATUS_RING_STATUS ((NDIS_STATUS)0x40010006L)
  292. #define NDIS_STATUS_CLOSED ((NDIS_STATUS)0x40010007L)
  293. #define NDIS_STATUS_WAN_LINE_UP ((NDIS_STATUS)0x40010008L)
  294. #define NDIS_STATUS_WAN_LINE_DOWN ((NDIS_STATUS)0x40010009L)
  295. #define NDIS_STATUS_WAN_FRAGMENT ((NDIS_STATUS)0x4001000AL)
  296. #define NDIS_STATUS_MEDIA_CONNECT ((NDIS_STATUS)0x4001000BL)
  297. #define NDIS_STATUS_MEDIA_DISCONNECT ((NDIS_STATUS)0x4001000CL)
  298. #define NDIS_STATUS_HARDWARE_LINE_UP ((NDIS_STATUS)0x4001000DL)
  299. #define NDIS_STATUS_HARDWARE_LINE_DOWN ((NDIS_STATUS)0x4001000EL)
  300. #define NDIS_STATUS_INTERFACE_UP ((NDIS_STATUS)0x4001000FL)
  301. #define NDIS_STATUS_INTERFACE_DOWN ((NDIS_STATUS)0x40010010L)
  302. #define NDIS_STATUS_MEDIA_BUSY ((NDIS_STATUS)0x40010011L)
  303. #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION ((NDIS_STATUS)0x40010012L)
  304. #define NDIS_STATUS_WW_INDICATION NDIS_STATUS_MEDIA_SPECIFIC_INDICATION
  305. #define NDIS_STATUS_LINK_SPEED_CHANGE ((NDIS_STATUS)0x40010013L)
  306. #define NDIS_STATUS_WAN_GET_STATS ((NDIS_STATUS)0x40010014L)
  307. #define NDIS_STATUS_WAN_CO_FRAGMENT ((NDIS_STATUS)0x40010015L)
  308. #define NDIS_STATUS_WAN_CO_LINKPARAMS ((NDIS_STATUS)0x40010016L)
  309. #if NDIS_SUPPORT_NDIS6
  310. #define NDIS_STATUS_LINK_STATE ((NDIS_STATUS)0x40010017L)
  311. #define NDIS_STATUS_NETWORK_CHANGE ((NDIS_STATUS)0x40010018L)
  312. #define NDIS_STATUS_MEDIA_SPECIFIC_INDICATION_EX ((NDIS_STATUS)0x40010019L)
  313. #define NDIS_STATUS_PORT_STATE ((NDIS_STATUS)0x40010022L)
  314. #define NDIS_STATUS_OPER_STATUS ((NDIS_STATUS)0x40010023L)
  315. #define NDIS_STATUS_PACKET_FILTER ((NDIS_STATUS)0x40010024L)
  316. #endif /* NDIS_SUPPORT_NDIS6 */
  317. #define NDIS_STATUS_WAN_CO_MTULINKPARAMS ((NDIS_STATUS)0x40010025L)
  318. #if NDIS_SUPPORT_NDIS6
  319. #define NDIS_STATUS_IP_OPER_STATUS ((NDIS_STATUS)0x40010026L)
  320. #define NDIS_STATUS_OFFLOAD_PAUSE ((NDIS_STATUS)0x40020001L)
  321. #define NDIS_STATUS_UPLOAD_ALL ((NDIS_STATUS)0x40020002L)
  322. #define NDIS_STATUS_OFFLOAD_RESUME ((NDIS_STATUS)0x40020003L)
  323. #define NDIS_STATUS_OFFLOAD_PARTIAL_SUCCESS ((NDIS_STATUS)0x40020004L)
  324. #define NDIS_STATUS_OFFLOAD_STATE_INVALID ((NDIS_STATUS)0x40020005L)
  325. #define NDIS_STATUS_TASK_OFFLOAD_CURRENT_CONFIG ((NDIS_STATUS)0x40020006L)
  326. #define NDIS_STATUS_TASK_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x40020007L)
  327. #define NDIS_STATUS_OFFLOAD_ENCASPULATION_CHANGE ((NDIS_STATUS)0x40020008L)
  328. #define NDIS_STATUS_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES ((NDIS_STATUS)0x4002000BL)
  329. #if (NDIS_SUPPORT_NDIS61)
  330. #define NDIS_STATUS_HD_SPLIT_CURRENT_CONFIG ((NDIS_STATUS)0x4002000CL)
  331. #endif
  332. #if (NDIS_SUPPORT_NDIS620)
  333. #define NDIS_STATUS_RECEIVE_QUEUE_STATE ((NDIS_STATUS)0x4002000DL)
  334. #endif
  335. #define NDIS_STATUS_OFFLOAD_IM_RESERVED1 ((NDIS_STATUS)0x40020100L)
  336. #define NDIS_STATUS_OFFLOAD_IM_RESERVED2 ((NDIS_STATUS)0x40020101L)
  337. #define NDIS_STATUS_OFFLOAD_IM_RESERVED3 ((NDIS_STATUS)0x40020102L)
  338. #define NDIS_STATUS_DOT11_SCAN_CONFIRM ((NDIS_STATUS)0x40030000L)
  339. #define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED ((NDIS_STATUS)0x40030001L)
  340. #define NDIS_STATUS_DOT11_ASSOCIATION_START ((NDIS_STATUS)0x40030002L)
  341. #define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION ((NDIS_STATUS)0x40030003L)
  342. #define NDIS_STATUS_DOT11_CONNECTION_START ((NDIS_STATUS)0x40030004L)
  343. #define NDIS_STATUS_DOT11_CONNECTION_COMPLETION ((NDIS_STATUS)0x40030005L)
  344. #define NDIS_STATUS_DOT11_ROAMING_START ((NDIS_STATUS)0x40030006L)
  345. #define NDIS_STATUS_DOT11_ROAMING_COMPLETION ((NDIS_STATUS)0x40030007L)
  346. #define NDIS_STATUS_DOT11_DISASSOCIATION ((NDIS_STATUS)0x40030008L)
  347. #define NDIS_STATUS_DOT11_TKIPMIC_FAILURE ((NDIS_STATUS)0x40030009L)
  348. #define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST ((NDIS_STATUS)0x4003000AL)
  349. #define NDIS_STATUS_DOT11_PHY_STATE_CHANGED ((NDIS_STATUS)0x4003000BL)
  350. #define NDIS_STATUS_DOT11_LINK_QUALITY ((NDIS_STATUS)0x4003000CL)
  351. #define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED ((NDIS_STATUS)0x4003000DL)
  352. #define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED ((NDIS_STATUS)0x4003000EL)
  353. #define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION ((NDIS_STATUS)0x4003000FL)
  354. #define NDIS_STATUS_DOT11_STOP_AP ((NDIS_STATUS)0x40030010L)
  355. #define NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED ((NDIS_STATUS)0x40030011L)
  356. #define NDIS_STATUS_DOT11_CAN_SUSTAIN_AP ((NDIS_STATUS)0x40030012L)
  357. #define NDIS_STATUS_WWAN_DEVICE_CAPS ((NDIS_STATUS)0x40041000)
  358. #define NDIS_STATUS_WWAN_READY_INFO ((NDIS_STATUS)0x40041001)
  359. #define NDIS_STATUS_WWAN_RADIO_STATE ((NDIS_STATUS)0x40041002)
  360. #define NDIS_STATUS_WWAN_PIN_INFO ((NDIS_STATUS)0x40041003)
  361. #define NDIS_STATUS_WWAN_PIN_LIST ((NDIS_STATUS)0x40041004)
  362. #define NDIS_STATUS_WWAN_HOME_PROVIDER ((NDIS_STATUS)0x40041005)
  363. #define NDIS_STATUS_WWAN_PREFERRED_PROVIDERS ((NDIS_STATUS)0x40041006)
  364. #define NDIS_STATUS_WWAN_VISIBLE_PROVIDERS ((NDIS_STATUS)0x40041007)
  365. #define NDIS_STATUS_WWAN_REGISTER_STATE ((NDIS_STATUS)0x40041008)
  366. #define NDIS_STATUS_WWAN_PACKET_SERVICE ((NDIS_STATUS)0x40041009)
  367. #define NDIS_STATUS_WWAN_SIGNAL_STATE ((NDIS_STATUS)0x4004100a)
  368. #define NDIS_STATUS_WWAN_CONTEXT_STATE ((NDIS_STATUS)0x4004100b)
  369. #define NDIS_STATUS_WWAN_PROVISIONED_CONTEXTS ((NDIS_STATUS)0x4004100c)
  370. #define NDIS_STATUS_WWAN_SERVICE_ACTIVATION ((NDIS_STATUS)0x4004100d)
  371. #define NDIS_STATUS_WWAN_SMS_CONFIGURATION ((NDIS_STATUS)0x4004100e)
  372. #define NDIS_STATUS_WWAN_SMS_RECEIVE ((NDIS_STATUS)0x4004100f)
  373. #define NDIS_STATUS_WWAN_SMS_SEND ((NDIS_STATUS)0x40041010)
  374. #define NDIS_STATUS_WWAN_SMS_DELETE ((NDIS_STATUS)0x40041011)
  375. #define NDIS_STATUS_WWAN_SMS_STATUS ((NDIS_STATUS)0x40041012)
  376. #define NDIS_STATUS_WWAN_DNS_ADDRESS ((NDIS_STATUS)0x40041013)
  377. #define NDIS_STATUS_WWAN_VENDOR_SPECIFIC ((NDIS_STATUS)0x40043000)
  378. #endif /* NDIS_SUPPORT_NDIS6 */
  379. #if (NDIS_SUPPORT_NDIS620)
  380. #define NDIS_STATUS_PM_WOL_PATTERN_REJECTED ((NDIS_STATUS)0x40030051L)
  381. #define NDIS_STATUS_PM_OFFLOAD_REJECTED ((NDIS_STATUS)0x40030052L)
  382. #define NDIS_STATUS_PM_CAPABILITIES_CHANGE ((NDIS_STATUS)0x40030053L)
  383. #endif
  384. #define NDIS_STATUS_NOT_RESETTABLE ((NDIS_STATUS)0x80010001L)
  385. #define NDIS_STATUS_SOFT_ERRORS ((NDIS_STATUS)0x80010003L)
  386. #define NDIS_STATUS_HARD_ERRORS ((NDIS_STATUS)0x80010004L)
  387. #define NDIS_STATUS_BUFFER_OVERFLOW ((NDIS_STATUS)STATUS_BUFFER_OVERFLOW)
  388. #define NDIS_STATUS_FAILURE ((NDIS_STATUS)STATUS_UNSUCCESSFUL)
  389. #define NDIS_STATUS_RESOURCES ((NDIS_STATUS)STATUS_INSUFFICIENT_RESOURCES)
  390. #define NDIS_STATUS_CLOSING ((NDIS_STATUS)0xC0010002L)
  391. #define NDIS_STATUS_BAD_VERSION ((NDIS_STATUS)0xC0010004L)
  392. #define NDIS_STATUS_BAD_CHARACTERISTICS ((NDIS_STATUS)0xC0010005L)
  393. #define NDIS_STATUS_ADAPTER_NOT_FOUND ((NDIS_STATUS)0xC0010006L)
  394. #define NDIS_STATUS_OPEN_FAILED ((NDIS_STATUS)0xC0010007L)
  395. #define NDIS_STATUS_DEVICE_FAILED ((NDIS_STATUS)0xC0010008L)
  396. #define NDIS_STATUS_MULTICAST_FULL ((NDIS_STATUS)0xC0010009L)
  397. #define NDIS_STATUS_MULTICAST_EXISTS ((NDIS_STATUS)0xC001000AL)
  398. #define NDIS_STATUS_MULTICAST_NOT_FOUND ((NDIS_STATUS)0xC001000BL)
  399. #define NDIS_STATUS_REQUEST_ABORTED ((NDIS_STATUS)0xC001000CL)
  400. #define NDIS_STATUS_RESET_IN_PROGRESS ((NDIS_STATUS)0xC001000DL)
  401. #define NDIS_STATUS_CLOSING_INDICATING ((NDIS_STATUS)0xC001000EL)
  402. #define NDIS_STATUS_NOT_SUPPORTED ((NDIS_STATUS)STATUS_NOT_SUPPORTED)
  403. #define NDIS_STATUS_INVALID_PACKET ((NDIS_STATUS)0xC001000FL)
  404. #define NDIS_STATUS_OPEN_LIST_FULL ((NDIS_STATUS)0xC0010010L)
  405. #define NDIS_STATUS_ADAPTER_NOT_READY ((NDIS_STATUS)0xC0010011L)
  406. #define NDIS_STATUS_ADAPTER_NOT_OPEN ((NDIS_STATUS)0xC0010012L)
  407. #define NDIS_STATUS_NOT_INDICATING ((NDIS_STATUS)0xC0010013L)
  408. #define NDIS_STATUS_INVALID_LENGTH ((NDIS_STATUS)0xC0010014L)
  409. #define NDIS_STATUS_INVALID_DATA ((NDIS_STATUS)0xC0010015L)
  410. #define NDIS_STATUS_BUFFER_TOO_SHORT ((NDIS_STATUS)0xC0010016L)
  411. #define NDIS_STATUS_INVALID_OID ((NDIS_STATUS)0xC0010017L)
  412. #define NDIS_STATUS_ADAPTER_REMOVED ((NDIS_STATUS)0xC0010018L)
  413. #define NDIS_STATUS_UNSUPPORTED_MEDIA ((NDIS_STATUS)0xC0010019L)
  414. #define NDIS_STATUS_GROUP_ADDRESS_IN_USE ((NDIS_STATUS)0xC001001AL)
  415. #define NDIS_STATUS_FILE_NOT_FOUND ((NDIS_STATUS)0xC001001BL)
  416. #define NDIS_STATUS_ERROR_READING_FILE ((NDIS_STATUS)0xC001001CL)
  417. #define NDIS_STATUS_ALREADY_MAPPED ((NDIS_STATUS)0xC001001DL)
  418. #define NDIS_STATUS_RESOURCE_CONFLICT ((NDIS_STATUS)0xC001001EL)
  419. #define NDIS_STATUS_NO_CABLE ((NDIS_STATUS)0xC001001FL)
  420. #define NDIS_STATUS_INVALID_SAP ((NDIS_STATUS)0xC0010020L)
  421. #define NDIS_STATUS_SAP_IN_USE ((NDIS_STATUS)0xC0010021L)
  422. #define NDIS_STATUS_INVALID_ADDRESS ((NDIS_STATUS)0xC0010022L)
  423. #define NDIS_STATUS_VC_NOT_ACTIVATED ((NDIS_STATUS)0xC0010023L)
  424. #define NDIS_STATUS_DEST_OUT_OF_ORDER ((NDIS_STATUS)0xC0010024L)
  425. #define NDIS_STATUS_VC_NOT_AVAILABLE ((NDIS_STATUS)0xC0010025L)
  426. #define NDIS_STATUS_CELLRATE_NOT_AVAILABLE ((NDIS_STATUS)0xC0010026L)
  427. #define NDIS_STATUS_INCOMPATABLE_QOS ((NDIS_STATUS)0xC0010027L)
  428. #define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED ((NDIS_STATUS)0xC0010028L)
  429. #define NDIS_STATUS_NO_ROUTE_TO_DESTINATION ((NDIS_STATUS)0xC0010029L)
  430. #define NDIS_STATUS_TOKEN_RING_OPEN_ERROR ((NDIS_STATUS)0xC0011000L)
  431. #define NDIS_STATUS_INVALID_DEVICE_REQUEST ((NDIS_STATUS)STATUS_INVALID_DEVICE_REQUEST)
  432. #define NDIS_STATUS_NETWORK_UNREACHABLE ((NDIS_STATUS)STATUS_NETWORK_UNREACHABLE)
  433. #if NDIS_SUPPORT_NDIS6
  434. #define NDIS_STATUS_SEND_ABORTED ((NDIS_STATUS)STATUS_NDIS_REQUEST_ABORTED)
  435. #define NDIS_STATUS_PAUSED ((NDIS_STATUS)STATUS_NDIS_PAUSED)
  436. #define NDIS_STATUS_INTERFACE_NOT_FOUND ((NDIS_STATUS)STATUS_NDIS_INTERFACE_NOT_FOUND)
  437. #define NDIS_STATUS_INVALID_PARAMETER ((NDIS_STATUS)STATUS_INVALID_PARAMETER)
  438. #define NDIS_STATUS_UNSUPPORTED_REVISION ((NDIS_STATUS)STATUS_NDIS_UNSUPPORTED_REVISION)
  439. #define NDIS_STATUS_INVALID_PORT ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT)
  440. #define NDIS_STATUS_INVALID_PORT_STATE ((NDIS_STATUS)STATUS_NDIS_INVALID_PORT_STATE)
  441. #define NDIS_STATUS_INVALID_STATE ((NDIS_STATUS)STATUS_INVALID_DEVICE_STATE)
  442. #define NDIS_STATUS_MEDIA_DISCONNECTED ((NDIS_STATUS)STATUS_NDIS_MEDIA_DISCONNECTED)
  443. #define NDIS_STATUS_LOW_POWER_STATE ((NDIS_STATUS)STATUS_NDIS_LOW_POWER_STATE)
  444. #define NDIS_STATUS_DOT11_AUTO_CONFIG_ENABLED ((NDIS_STATUS)STATUS_NDIS_DOT11_AUTO_CONFIG_ENABLED)
  445. #define NDIS_STATUS_DOT11_MEDIA_IN_USE ((NDIS_STATUS)STATUS_NDIS_DOT11_MEDIA_IN_USE)
  446. #define NDIS_STATUS_DOT11_POWER_STATE_INVALID ((NDIS_STATUS)STATUS_NDIS_DOT11_POWER_STATE_INVALID)
  447. #define NDIS_STATUS_UPLOAD_IN_PROGRESS ((NDIS_STATUS)0xC0231001L)
  448. #define NDIS_STATUS_REQUEST_UPLOAD ((NDIS_STATUS)0xC0231002L)
  449. #define NDIS_STATUS_UPLOAD_REQUESTED ((NDIS_STATUS)0xC0231003L)
  450. #define NDIS_STATUS_OFFLOAD_TCP_ENTRIES ((NDIS_STATUS)0xC0231004L)
  451. #define NDIS_STATUS_OFFLOAD_PATH_ENTRIES ((NDIS_STATUS)0xC0231005L)
  452. #define NDIS_STATUS_OFFLOAD_NEIGHBOR_ENTRIES ((NDIS_STATUS)0xC0231006L)
  453. #define NDIS_STATUS_OFFLOAD_IP_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231007L)
  454. #define NDIS_STATUS_OFFLOAD_HW_ADDRESS_ENTRIES ((NDIS_STATUS)0xC0231008L)
  455. #define NDIS_STATUS_OFFLOAD_VLAN_ENTRIES ((NDIS_STATUS)0xC0231009L)
  456. #define NDIS_STATUS_OFFLOAD_TCP_XMIT_BUFFER ((NDIS_STATUS)0xC023100AL)
  457. #define NDIS_STATUS_OFFLOAD_TCP_RCV_BUFFER ((NDIS_STATUS)0xC023100BL)
  458. #define NDIS_STATUS_OFFLOAD_TCP_RCV_WINDOW ((NDIS_STATUS)0xC023100CL)
  459. #define NDIS_STATUS_OFFLOAD_VLAN_MISMATCH ((NDIS_STATUS)0xC023100DL)
  460. #define NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED ((NDIS_STATUS)0xC023100EL)
  461. #define NDIS_STATUS_OFFLOAD_POLICY ((NDIS_STATUS)0xC023100FL)
  462. #define NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED ((NDIS_STATUS)0xC0231010L)
  463. #define NDIS_STATUS_OFFLOAD_REQUEST_RESET ((NDIS_STATUS)0xC0231011L)
  464. #if NDIS_SUPPORT_NDIS620
  465. #define NDIS_STATUS_PM_WOL_PATTERN_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_WOL_PATTERN_LIST_FULL)
  466. #define NDIS_STATUS_PM_PROTOCOL_OFFLOAD_LIST_FULL ((NDIS_STATUS)STATUS_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL)
  467. #endif
  468. #endif /* NDIS_SUPPORT_NDIS6 */
  469. #if (NDIS_SUPPORT_NDIS620)
  470. #define NDIS_STATUS_OFFLOAD_CONNECTION_REJECTED ((NDIS_STATUS)STATUS_NDIS_OFFLOAD_CONNECTION_REJECTED)
  471. #endif
  472. /* NDIS error codes for error logging */
  473. #define NDIS_ERROR_CODE ULONG
  474. #define NDIS_ERROR_CODE_RESOURCE_CONFLICT EVENT_NDIS_RESOURCE_CONFLICT
  475. #define NDIS_ERROR_CODE_OUT_OF_RESOURCES EVENT_NDIS_OUT_OF_RESOURCE
  476. #define NDIS_ERROR_CODE_HARDWARE_FAILURE EVENT_NDIS_HARDWARE_FAILURE
  477. #define NDIS_ERROR_CODE_ADAPTER_NOT_FOUND EVENT_NDIS_ADAPTER_NOT_FOUND
  478. #define NDIS_ERROR_CODE_INTERRUPT_CONNECT EVENT_NDIS_INTERRUPT_CONNECT
  479. #define NDIS_ERROR_CODE_DRIVER_FAILURE EVENT_NDIS_DRIVER_FAILURE
  480. #define NDIS_ERROR_CODE_BAD_VERSION EVENT_NDIS_BAD_VERSION
  481. #define NDIS_ERROR_CODE_TIMEOUT EVENT_NDIS_TIMEOUT
  482. #define NDIS_ERROR_CODE_NETWORK_ADDRESS EVENT_NDIS_NETWORK_ADDRESS
  483. #define NDIS_ERROR_CODE_UNSUPPORTED_CONFIGURATION EVENT_NDIS_UNSUPPORTED_CONFIGURATION
  484. #define NDIS_ERROR_CODE_INVALID_VALUE_FROM_ADAPTER EVENT_NDIS_INVALID_VALUE_FROM_ADAPTER
  485. #define NDIS_ERROR_CODE_MISSING_CONFIGURATION_PARAMETER EVENT_NDIS_MISSING_CONFIGURATION_PARAMETER
  486. #define NDIS_ERROR_CODE_BAD_IO_BASE_ADDRESS EVENT_NDIS_BAD_IO_BASE_ADDRESS
  487. #define NDIS_ERROR_CODE_RECEIVE_SPACE_SMALL EVENT_NDIS_RECEIVE_SPACE_SMALL
  488. #define NDIS_ERROR_CODE_ADAPTER_DISABLED EVENT_NDIS_ADAPTER_DISABLED
  489. /* Memory allocation flags. Used by Ndis[Allocate|Free]Memory */
  490. #define NDIS_MEMORY_CONTIGUOUS 0x00000001
  491. #define NDIS_MEMORY_NONCACHED 0x00000002
  492. /* NIC attribute flags. Used by NdisMSetAttributes(Ex) */
  493. #define NDIS_ATTRIBUTE_IGNORE_PACKET_TIMEOUT 0x00000001
  494. #define NDIS_ATTRIBUTE_IGNORE_REQUEST_TIMEOUT 0x00000002
  495. #define NDIS_ATTRIBUTE_IGNORE_TOKEN_RING_ERRORS 0x00000004
  496. #define NDIS_ATTRIBUTE_BUS_MASTER 0x00000008
  497. #define NDIS_ATTRIBUTE_INTERMEDIATE_DRIVER 0x00000010
  498. #define NDIS_ATTRIBUTE_DESERIALIZE 0x00000020
  499. #define NDIS_ATTRIBUTE_NO_HALT_ON_SUSPEND 0x00000040
  500. #define NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK 0x00000080
  501. #define NDIS_ATTRIBUTE_NOT_CO_NDIS 0x00000100
  502. #define NDIS_ATTRIBUTE_USES_SAFE_BUFFER_APIS 0x00000200
  503. /* Lock */
  504. #if NDIS_SUPPORT_60_COMPATIBLE_API
  505. typedef union _NDIS_RW_LOCK_REFCOUNT {
  506. UINT RefCount;
  507. UCHAR cacheLine[16];
  508. } NDIS_RW_LOCK_REFCOUNT;
  509. typedef struct _NDIS_RW_LOCK {
  510. __MINGW_EXTENSION union {
  511. __MINGW_EXTENSION struct {
  512. KSPIN_LOCK SpinLock;
  513. PVOID Context;
  514. };
  515. UCHAR Reserved[16];
  516. };
  517. __MINGW_EXTENSION union {
  518. NDIS_RW_LOCK_REFCOUNT RefCount[MAXIMUM_PROCESSORS];
  519. ULONG RefCountEx[sizeof(NDIS_RW_LOCK_REFCOUNT)/sizeof(ULONG) * MAXIMUM_PROCESSORS];
  520. __MINGW_EXTENSION struct {
  521. KSPIN_LOCK RefCountLock;
  522. volatile ULONG SharedRefCount;
  523. volatile BOOLEAN WriterWaiting;
  524. };
  525. };
  526. } NDIS_RW_LOCK, *PNDIS_RW_LOCK;
  527. typedef struct _LOCK_STATE {
  528. USHORT LockState;
  529. KIRQL OldIrql;
  530. } LOCK_STATE, *PLOCK_STATE;
  531. #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */
  532. /* Timer */
  533. typedef VOID
  534. (NTAPI NDIS_TIMER_FUNCTION)(
  535. IN PVOID SystemSpecific1,
  536. IN PVOID FunctionContext,
  537. IN PVOID SystemSpecific2,
  538. IN PVOID SystemSpecific3);
  539. typedef NDIS_TIMER_FUNCTION *PNDIS_TIMER_FUNCTION;
  540. typedef struct _NDIS_TIMER {
  541. KTIMER Timer;
  542. KDPC Dpc;
  543. } NDIS_TIMER, *PNDIS_TIMER;
  544. /* Hardware */
  545. typedef CM_MCA_POS_DATA NDIS_MCA_POS_DATA, *PNDIS_MCA_POS_DATA;
  546. typedef CM_EISA_SLOT_INFORMATION NDIS_EISA_SLOT_INFORMATION, *PNDIS_EISA_SLOT_INFORMATION;
  547. typedef CM_EISA_FUNCTION_INFORMATION NDIS_EISA_FUNCTION_INFORMATION, *PNDIS_EISA_FUNCTION_INFORMATION;
  548. typedef CM_PARTIAL_RESOURCE_LIST NDIS_RESOURCE_LIST, *PNDIS_RESOURCE_LIST;
  549. /* Flag bits */
  550. #define READABLE_LOCAL_CLOCK 0x00000001
  551. #define CLOCK_NETWORK_DERIVED 0x00000002
  552. #define CLOCK_PRECISION 0x00000004
  553. #define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
  554. #define TIMED_SEND_CAPABLE 0x00000010
  555. #define TIME_STAMP_CAPABLE 0x00000020
  556. /* NDIS packet filter bits (OID_GEN_CURRENT_PACKET_FILTER) */
  557. #define NDIS_PACKET_TYPE_DIRECTED 0x00000001
  558. #define NDIS_PACKET_TYPE_MULTICAST 0x00000002
  559. #define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
  560. #define NDIS_PACKET_TYPE_BROADCAST 0x00000008
  561. #define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
  562. #define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
  563. #define NDIS_PACKET_TYPE_SMT 0x00000040
  564. #define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
  565. #define NDIS_PACKET_TYPE_GROUP 0x00001000
  566. #define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
  567. #define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
  568. #define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
  569. /* NDIS protocol option bits (OID_GEN_PROTOCOL_OPTIONS) */
  570. #define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
  571. #define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
  572. #define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
  573. /* NDIS MAC option bits (OID_GEN_MAC_OPTIONS) */
  574. #define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
  575. #define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
  576. #define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
  577. #define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
  578. #define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
  579. #define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
  580. #define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
  581. #define NDIS_MAC_OPTION_RESERVED 0x80000000
  582. #define NDIS_GUID_TO_OID 0x00000001
  583. #define NDIS_GUID_TO_STATUS 0x00000002
  584. #define NDIS_GUID_ANSI_STRING 0x00000004
  585. #define NDIS_GUID_UNICODE_STRING 0x00000008
  586. #define NDIS_GUID_ARRAY 0x00000010
  587. #if NDIS_LEGACY_DRIVER
  588. /* NDIS_PACKET_PRIVATE.Flags constants */
  589. #define fPACKET_WRAPPER_RESERVED 0x3f
  590. #define fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO 0x40
  591. #define fPACKET_ALLOCATED_BY_NDIS 0x80
  592. #define NDIS_FLAGS_PROTOCOL_ID_MASK 0x0000000f
  593. #define NDIS_FLAGS_MULTICAST_PACKET 0x00000010
  594. #define NDIS_FLAGS_RESERVED2 0x00000020
  595. #define NDIS_FLAGS_RESERVED3 0x00000040
  596. #define NDIS_FLAGS_DONT_LOOPBACK 0x00000080
  597. #define NDIS_FLAGS_IS_LOOPBACK_PACKET 0x00000100
  598. #define NDIS_FLAGS_LOOPBACK_ONLY 0x00000200
  599. #define NDIS_FLAGS_RESERVED4 0x00000400
  600. #define NDIS_FLAGS_DOUBLE_BUFFERED 0x00000800
  601. #define NDIS_FLAGS_SENT_AT_DPC 0x00001000
  602. #define NDIS_FLAGS_USES_SG_BUFFER_LIST 0x00002000
  603. #define NDIS_FLAGS_USES_ORIGINAL_PACKET 0x00004000
  604. #define NDIS_FLAGS_PADDED 0x00010000
  605. #define NDIS_FLAGS_XLATE_AT_TOP 0x00020000
  606. typedef NDIS_HANDLE PNDIS_PACKET_POOL;
  607. typedef struct _NDIS_PACKET_PRIVATE {
  608. UINT PhysicalCount;
  609. UINT TotalLength;
  610. PNDIS_BUFFER Head;
  611. PNDIS_BUFFER Tail;
  612. PNDIS_PACKET_POOL Pool;
  613. UINT Count;
  614. ULONG Flags;
  615. BOOLEAN ValidCounts;
  616. UCHAR NdisPacketFlags;
  617. USHORT NdisPacketOobOffset;
  618. } NDIS_PACKET_PRIVATE, *PNDIS_PACKET_PRIVATE;
  619. typedef struct _NDIS_PACKET {
  620. NDIS_PACKET_PRIVATE Private;
  621. __MINGW_EXTENSION union {
  622. __MINGW_EXTENSION struct {
  623. UCHAR MiniportReserved[2 * sizeof(PVOID)];
  624. UCHAR WrapperReserved[2 * sizeof(PVOID)];
  625. };
  626. __MINGW_EXTENSION struct {
  627. UCHAR MiniportReservedEx[3 * sizeof(PVOID)];
  628. UCHAR WrapperReservedEx[sizeof(PVOID)];
  629. };
  630. __MINGW_EXTENSION struct {
  631. UCHAR MacReserved[4 * sizeof(PVOID)];
  632. };
  633. };
  634. ULONG_PTR Reserved[2];
  635. UCHAR ProtocolReserved[1];
  636. } NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;
  637. typedef struct _NDIS_PACKET_STACK {
  638. ULONG_PTR IMReserved[2];
  639. ULONG_PTR NdisReserved[4];
  640. } NDIS_PACKET_STACK, *PNDIS_PACKET_STACK;
  641. #endif /* NDIS_LEGACY_DRIVER */
  642. typedef enum _NDIS_CLASS_ID {
  643. NdisClass802_3Priority,
  644. NdisClassWirelessWanMbxMailbox,
  645. NdisClassIrdaPacketInfo,
  646. NdisClassAtmAALInfo
  647. } NDIS_CLASS_ID;
  648. typedef struct _MEDIA_SPECIFIC_INFORMATION {
  649. UINT NextEntryOffset;
  650. NDIS_CLASS_ID ClassId;
  651. UINT Size;
  652. UCHAR ClassInformation[1];
  653. } MEDIA_SPECIFIC_INFORMATION, *PMEDIA_SPECIFIC_INFORMATION;
  654. #if NDIS_LEGACY_DRIVER
  655. typedef struct _NDIS_PACKET_OOB_DATA {
  656. __MINGW_EXTENSION union {
  657. ULONGLONG TimeToSend;
  658. ULONGLONG TimeSent;
  659. };
  660. ULONGLONG TimeReceived;
  661. UINT HeaderSize;
  662. UINT SizeMediaSpecificInfo;
  663. PVOID MediaSpecificInformation;
  664. NDIS_STATUS Status;
  665. } NDIS_PACKET_OOB_DATA, *PNDIS_PACKET_OOB_DATA;
  666. #endif
  667. /* Request types used by NdisRequest */
  668. typedef enum _NDIS_REQUEST_TYPE {
  669. NdisRequestQueryInformation,
  670. NdisRequestSetInformation,
  671. NdisRequestQueryStatistics,
  672. NdisRequestOpen,
  673. NdisRequestClose,
  674. NdisRequestSend,
  675. NdisRequestTransferData,
  676. NdisRequestReset,
  677. NdisRequestGeneric1,
  678. NdisRequestGeneric2,
  679. NdisRequestGeneric3,
  680. NdisRequestGeneric4,
  681. #if NDIS_SUPPORT_NDIS6
  682. NdisRequestMethod,
  683. #endif
  684. } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
  685. #if NDIS_LEGACY_DRIVER
  686. typedef struct _NDIS_REQUEST {
  687. UCHAR MacReserved[4 * sizeof(PVOID)];
  688. NDIS_REQUEST_TYPE RequestType;
  689. union _DATA {
  690. struct QUERY_INFORMATION {
  691. NDIS_OID Oid;
  692. PVOID InformationBuffer;
  693. UINT InformationBufferLength;
  694. UINT BytesWritten;
  695. UINT BytesNeeded;
  696. } QUERY_INFORMATION;
  697. struct SET_INFORMATION {
  698. NDIS_OID Oid;
  699. PVOID InformationBuffer;
  700. UINT InformationBufferLength;
  701. UINT BytesRead;
  702. UINT BytesNeeded;
  703. } SET_INFORMATION;
  704. } DATA;
  705. #if (defined(NDIS50) || defined(NDIS51) || defined(NDIS50_MINIPORT) || defined(NDIS51_MINIPORT))
  706. UCHAR NdisReserved[9 * sizeof(PVOID)];
  707. __MINGW_EXTENSION union {
  708. UCHAR CallMgrReserved[2 * sizeof(PVOID)];
  709. UCHAR ProtocolReserved[2 * sizeof(PVOID)];
  710. };
  711. UCHAR MiniportReserved[2 * sizeof(PVOID)];
  712. #endif
  713. } NDIS_REQUEST, *PNDIS_REQUEST;
  714. #endif /* NDIS_LEGACY_DRIVER */
  715. /* Wide Area Networks definitions */
  716. #if NDIS_LEGACY_DRIVER
  717. typedef struct _NDIS_WAN_PACKET {
  718. LIST_ENTRY WanPacketQueue;
  719. PUCHAR CurrentBuffer;
  720. ULONG CurrentLength;
  721. PUCHAR StartBuffer;
  722. PUCHAR EndBuffer;
  723. PVOID ProtocolReserved1;
  724. PVOID ProtocolReserved2;
  725. PVOID ProtocolReserved3;
  726. PVOID ProtocolReserved4;
  727. PVOID MacReserved1;
  728. PVOID MacReserved2;
  729. PVOID MacReserved3;
  730. PVOID MacReserved4;
  731. } NDIS_WAN_PACKET, *PNDIS_WAN_PACKET;
  732. #endif
  733. /* DMA channel information */
  734. typedef struct _NDIS_DMA_DESCRIPTION {
  735. BOOLEAN DemandMode;
  736. BOOLEAN AutoInitialize;
  737. BOOLEAN DmaChannelSpecified;
  738. DMA_WIDTH DmaWidth;
  739. DMA_SPEED DmaSpeed;
  740. ULONG DmaPort;
  741. ULONG DmaChannel;
  742. } NDIS_DMA_DESCRIPTION, *PNDIS_DMA_DESCRIPTION;
  743. typedef struct _NDIS_DMA_BLOCK {
  744. PVOID MapRegisterBase;
  745. KEVENT AllocationEvent;
  746. PADAPTER_OBJECT SystemAdapterObject;
  747. PVOID Miniport;
  748. BOOLEAN InProgress;
  749. } NDIS_DMA_BLOCK, *PNDIS_DMA_BLOCK;
  750. typedef UCHAR NDIS_DMA_SIZE;
  751. #define NDIS_DMA_24BITS ((NDIS_DMA_SIZE)0)
  752. #define NDIS_DMA_32BITS ((NDIS_DMA_SIZE)1)
  753. #define NDIS_DMA_64BITS ((NDIS_DMA_SIZE)2)
  754. typedef enum _NDIS_PROCESSOR_TYPE {
  755. NdisProcessorX86,
  756. NdisProcessorMips,
  757. NdisProcessorAlpha,
  758. NdisProcessorPpc,
  759. NdisProcessorAmd64,
  760. NdisProcessorIA64
  761. } NDIS_PROCESSOR_TYPE, *PNDIS_PROCESSOR_TYPE;
  762. typedef enum _NDIS_ENVIRONMENT_TYPE {
  763. NdisEnvironmentWindows,
  764. NdisEnvironmentWindowsNt
  765. } NDIS_ENVIRONMENT_TYPE, *PNDIS_ENVIRONMENT_TYPE;
  766. /* Possible hardware architecture */
  767. typedef enum _NDIS_INTERFACE_TYPE {
  768. NdisInterfaceInternal = Internal,
  769. NdisInterfaceIsa = Isa,
  770. NdisInterfaceEisa = Eisa,
  771. NdisInterfaceMca = MicroChannel,
  772. NdisInterfaceTurboChannel = TurboChannel,
  773. NdisInterfacePci = PCIBus,
  774. NdisInterfacePcMcia = PCMCIABus,
  775. NdisInterfaceCBus = CBus,
  776. NdisInterfaceMPIBus = MPIBus,
  777. NdisInterfaceMPSABus = MPSABus,
  778. NdisInterfaceProcessorInternal = ProcessorInternal,
  779. NdisInterfaceInternalPowerBus = InternalPowerBus,
  780. NdisInterfacePNPISABus = PNPISABus,
  781. NdisInterfacePNPBus = PNPBus,
  782. NdisInterfaceUSB,
  783. NdisInterfaceIrda,
  784. NdisInterface1394,
  785. NdisMaximumInterfaceType
  786. } NDIS_INTERFACE_TYPE, *PNDIS_INTERFACE_TYPE;
  787. #define NdisInterruptLevelSensitive LevelSensitive
  788. #define NdisInterruptLatched Latched
  789. typedef KINTERRUPT_MODE NDIS_INTERRUPT_MODE, *PNDIS_INTERRUPT_MODE;
  790. typedef enum _NDIS_PARAMETER_TYPE {
  791. NdisParameterInteger,
  792. NdisParameterHexInteger,
  793. NdisParameterString,
  794. NdisParameterMultiString,
  795. NdisParameterBinary
  796. } NDIS_PARAMETER_TYPE, *PNDIS_PARAMETER_TYPE;
  797. typedef struct _BINARY_DATA {
  798. USHORT Length;
  799. PVOID Buffer;
  800. } BINARY_DATA;
  801. typedef struct _NDIS_CONFIGURATION_PARAMETER {
  802. NDIS_PARAMETER_TYPE ParameterType;
  803. union {
  804. ULONG IntegerData;
  805. NDIS_STRING StringData;
  806. BINARY_DATA BinaryData;
  807. } ParameterData;
  808. } NDIS_CONFIGURATION_PARAMETER, *PNDIS_CONFIGURATION_PARAMETER;
  809. typedef PHYSICAL_ADDRESS NDIS_PHYSICAL_ADDRESS, *PNDIS_PHYSICAL_ADDRESS;
  810. typedef struct _NDIS_PHYSICAL_ADDRESS_UNIT {
  811. NDIS_PHYSICAL_ADDRESS PhysicalAddress;
  812. UINT Length;
  813. } NDIS_PHYSICAL_ADDRESS_UNIT, *PNDIS_PHYSICAL_ADDRESS_UNIT;
  814. typedef struct _NDIS_WAN_LINE_DOWN {
  815. UCHAR RemoteAddress[6];
  816. UCHAR LocalAddress[6];
  817. } NDIS_WAN_LINE_DOWN, *PNDIS_WAN_LINE_DOWN;
  818. typedef struct _NDIS_WAN_LINE_UP {
  819. ULONG LinkSpeed;
  820. ULONG MaximumTotalSize;
  821. NDIS_WAN_QUALITY Quality;
  822. USHORT SendWindow;
  823. UCHAR RemoteAddress[6];
  824. OUT UCHAR LocalAddress[6];
  825. ULONG ProtocolBufferLength;
  826. PUCHAR ProtocolBuffer;
  827. USHORT ProtocolType;
  828. NDIS_STRING DeviceName;
  829. } NDIS_WAN_LINE_UP, *PNDIS_WAN_LINE_UP;
  830. typedef NTSTATUS
  831. (NTAPI *TDI_REGISTER_CALLBACK)(
  832. IN PUNICODE_STRING DeviceName,
  833. OUT HANDLE *TdiHandle);
  834. typedef NTSTATUS
  835. (NTAPI *TDI_PNP_HANDLER)(
  836. IN PUNICODE_STRING UpperComponent,
  837. IN PUNICODE_STRING LowerComponent,
  838. IN PUNICODE_STRING BindList,
  839. IN PVOID ReconfigBuffer,
  840. IN UINT ReconfigBufferSize,
  841. IN UINT Operation);
  842. typedef struct _OID_LIST OID_LIST, *POID_LIST;
  843. /* PnP state */
  844. typedef enum _NDIS_PNP_DEVICE_STATE {
  845. NdisPnPDeviceAdded,
  846. NdisPnPDeviceStarted,
  847. NdisPnPDeviceQueryStopped,
  848. NdisPnPDeviceStopped,
  849. NdisPnPDeviceQueryRemoved,
  850. NdisPnPDeviceRemoved,
  851. NdisPnPDeviceSurpriseRemoved
  852. } NDIS_PNP_DEVICE_STATE;
  853. #define NDIS_DEVICE_NOT_STOPPABLE 0x00000001
  854. #define NDIS_DEVICE_NOT_REMOVEABLE 0x00000002
  855. #define NDIS_DEVICE_NOT_SUSPENDABLE 0x00000004
  856. #define NDIS_DEVICE_DISABLE_PM 0x00000008
  857. #define NDIS_DEVICE_DISABLE_WAKE_UP 0x00000010
  858. #define NDIS_DEVICE_DISABLE_WAKE_ON_RECONNECT 0x00000020
  859. #define NDIS_DEVICE_RESERVED 0x00000040
  860. #define NDIS_DEVICE_DISABLE_WAKE_ON_MAGIC_PACKET 0x00000080
  861. #define NDIS_DEVICE_DISABLE_WAKE_ON_PATTERN_MATCH 0x00000100
  862. /* Protocol types supported by NDIS */
  863. #define NDIS_PROTOCOL_ID_DEFAULT 0x00
  864. #define NDIS_PROTOCOL_ID_TCP_IP 0x02
  865. #define NDIS_PROTOCOL_ID_IPX 0x06
  866. #define NDIS_PROTOCOL_ID_NBF 0x07
  867. #define NDIS_PROTOCOL_ID_MAX 0x0F
  868. #define NDIS_PROTOCOL_ID_MASK 0x0F
  869. typedef ULONG NDIS_AF, *PNDIS_AF;
  870. #define CO_ADDRESS_FAMILY_Q2931 ((NDIS_AF)0x1)
  871. #define CO_ADDRESS_FAMILY_PSCHED ((NDIS_AF)0x2)
  872. #define CO_ADDRESS_FAMILY_L2TP ((NDIS_AF)0x3)
  873. #define CO_ADDRESS_FAMILY_IRDA ((NDIS_AF)0x4)
  874. #define CO_ADDRESS_FAMILY_1394 ((NDIS_AF)0x5)
  875. #define CO_ADDRESS_FAMILY_PPP ((NDIS_AF)0x6)
  876. #define CO_ADDRESS_FAMILY_INFINIBAND ((NDIS_AF)0x7)
  877. #define CO_ADDRESS_FAMILY_TAPI ((NDIS_AF)0x800)
  878. #define CO_ADDRESS_FAMILY_TAPI_PROXY ((NDIS_AF)0x801)
  879. #define CO_ADDRESS_FAMILY_PROXY 0x80000000
  880. typedef struct _CO_ADDRESS_FAMILY {
  881. NDIS_AF AddressFamily;
  882. ULONG MajorVersion;
  883. ULONG MinorVersion;
  884. } CO_ADDRESS_FAMILY, *PCO_ADDRESS_FAMILY;
  885. typedef struct _CO_SPECIFIC_PARAMETERS {
  886. ULONG ParamType;
  887. ULONG Length;
  888. UCHAR Parameters[1];
  889. } CO_SPECIFIC_PARAMETERS, *PCO_SPECIFIC_PARAMETERS;
  890. typedef struct _CO_CALL_MANAGER_PARAMETERS {
  891. FLOWSPEC Transmit;
  892. FLOWSPEC Receive;
  893. CO_SPECIFIC_PARAMETERS CallMgrSpecific;
  894. } CO_CALL_MANAGER_PARAMETERS, *PCO_CALL_MANAGER_PARAMETERS;
  895. /* CO_MEDIA_PARAMETERS.Flags constants */
  896. #define RECEIVE_TIME_INDICATION 0x00000001
  897. #define USE_TIME_STAMPS 0x00000002
  898. #define TRANSMIT_VC 0x00000004
  899. #define RECEIVE_VC 0x00000008
  900. #define INDICATE_ERRED_PACKETS 0x00000010
  901. #define INDICATE_END_OF_TX 0x00000020
  902. #define RESERVE_RESOURCES_VC 0x00000040
  903. #define ROUND_DOWN_FLOW 0x00000080
  904. #define ROUND_UP_FLOW 0x00000100
  905. typedef struct _CO_MEDIA_PARAMETERS {
  906. ULONG Flags;
  907. ULONG ReceivePriority;
  908. ULONG ReceiveSizeHint;
  909. CO_SPECIFIC_PARAMETERS MediaSpecific;
  910. } CO_MEDIA_PARAMETERS, *PCO_MEDIA_PARAMETERS;
  911. /* CO_CALL_PARAMETERS.Flags constants */
  912. #define PERMANENT_VC 0x00000001
  913. #define CALL_PARAMETERS_CHANGED 0x00000002
  914. #define QUERY_CALL_PARAMETERS 0x00000004
  915. #define BROADCAST_VC 0x00000008
  916. #define MULTIPOINT_VC 0x00000010
  917. typedef struct _CO_CALL_PARAMETERS {
  918. ULONG Flags;
  919. PCO_CALL_MANAGER_PARAMETERS CallMgrParameters;
  920. PCO_MEDIA_PARAMETERS MediaParameters;
  921. } CO_CALL_PARAMETERS, *PCO_CALL_PARAMETERS;
  922. typedef struct _CO_SAP {
  923. ULONG SapType;
  924. ULONG SapLength;
  925. UCHAR Sap[1];
  926. } CO_SAP, *PCO_SAP;
  927. #if NDIS_LEGACY_DRIVER
  928. typedef struct _NDIS_IPSEC_PACKET_INFO {
  929. __MINGW_EXTENSION union {
  930. struct {
  931. NDIS_HANDLE OffloadHandle;
  932. NDIS_HANDLE NextOffloadHandle;
  933. } Transmit;
  934. struct {
  935. ULONG SA_DELETE_REQ:1;
  936. ULONG CRYPTO_DONE:1;
  937. ULONG NEXT_CRYPTO_DONE:1;
  938. ULONG CryptoStatus;
  939. } Receive;
  940. };
  941. } NDIS_IPSEC_PACKET_INFO, *PNDIS_IPSEC_PACKET_INFO;
  942. #endif
  943. #if (NDIS_SUPPORT_NDIS6 || NDIS60)
  944. typedef struct _NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO {
  945. __MINGW_EXTENSION union {
  946. struct {
  947. NDIS_HANDLE OffloadHandle;
  948. } Transmit;
  949. struct {
  950. USHORT SaDeleteReq:1;
  951. USHORT CryptoDone:1;
  952. USHORT NextCryptoDone:1;
  953. USHORT Pad:13;
  954. USHORT CryptoStatus;
  955. } Receive;
  956. };
  957. } NDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO, *PNDIS_IPSEC_OFFLOAD_V1_NET_BUFFER_LIST_INFO;
  958. #endif
  959. /* NDIS_MAC_FRAGMENT.Errors constants */
  960. #define WAN_ERROR_CRC 0x00000001
  961. #define WAN_ERROR_FRAMING 0x00000002
  962. #define WAN_ERROR_HARDWAREOVERRUN 0x00000004
  963. #define WAN_ERROR_BUFFEROVERRUN 0x00000008
  964. #define WAN_ERROR_TIMEOUT 0x00000010
  965. #define WAN_ERROR_ALIGNMENT 0x00000020
  966. typedef struct _NDIS_MAC_FRAGMENT {
  967. NDIS_HANDLE NdisLinkContext;
  968. ULONG Errors;
  969. } NDIS_MAC_FRAGMENT, *PNDIS_MAC_FRAGMENT;
  970. typedef struct _NDIS_MAC_LINE_DOWN {
  971. NDIS_HANDLE NdisLinkContext;
  972. } NDIS_MAC_LINE_DOWN, *PNDIS_MAC_LINE_DOWN;
  973. typedef struct _NDIS_MAC_LINE_UP {
  974. ULONG LinkSpeed;
  975. NDIS_WAN_QUALITY Quality;
  976. USHORT SendWindow;
  977. NDIS_HANDLE ConnectionWrapperID;
  978. NDIS_HANDLE NdisLinkHandle;
  979. NDIS_HANDLE NdisLinkContext;
  980. } NDIS_MAC_LINE_UP, *PNDIS_MAC_LINE_UP;
  981. typedef struct _NDIS_PACKET_8021Q_INFO {
  982. __MINGW_EXTENSION union {
  983. struct {
  984. UINT32 UserPriority:3;
  985. UINT32 CanonicalFormatId:1;
  986. UINT32 VlanId:12;
  987. UINT32 Reserved:16;
  988. } TagHeader;
  989. PVOID Value;
  990. };
  991. } NDIS_PACKET_8021Q_INFO, *PNDIS_PACKET_8021Q_INFO;
  992. typedef enum _NDIS_PER_PACKET_INFO {
  993. TcpIpChecksumPacketInfo,
  994. IpSecPacketInfo,
  995. TcpLargeSendPacketInfo,
  996. ClassificationHandlePacketInfo,
  997. NdisReserved,
  998. ScatterGatherListPacketInfo,
  999. Ieee8021QInfo,
  1000. OriginalPacketInfo,
  1001. PacketCancelId,
  1002. OriginalNetBufferList,
  1003. CachedNetBufferList,
  1004. ShortPacketPaddingInfo,
  1005. MaxPerPacketInfo
  1006. } NDIS_PER_PACKET_INFO, *PNDIS_PER_PACKET_INFO;
  1007. #if NDIS_LEGACY_DRIVER
  1008. typedef struct _NDIS_PACKET_EXTENSION {
  1009. PVOID NdisPacketInfo[MaxPerPacketInfo];
  1010. } NDIS_PACKET_EXTENSION, *PNDIS_PACKET_EXTENSION;
  1011. typedef enum _NDIS_TASK {
  1012. TcpIpChecksumNdisTask,
  1013. IpSecNdisTask,
  1014. TcpLargeSendNdisTask,
  1015. MaxNdisTask
  1016. } NDIS_TASK, *PNDIS_TASK;
  1017. typedef enum _NDIS_ENCAPSULATION {
  1018. UNSPECIFIED_Encapsulation,
  1019. NULL_Encapsulation,
  1020. IEEE_802_3_Encapsulation,
  1021. IEEE_802_5_Encapsulation,
  1022. LLC_SNAP_ROUTED_Encapsulation,
  1023. LLC_SNAP_BRIDGED_Encapsulation
  1024. } NDIS_ENCAPSULATION;
  1025. typedef struct _NDIS_ENCAPSULATION_FORMAT {
  1026. NDIS_ENCAPSULATION Encapsulation;
  1027. struct {
  1028. ULONG FixedHeaderSize:1;
  1029. ULONG Reserved:31;
  1030. } Flags;
  1031. ULONG EncapsulationHeaderSize;
  1032. } NDIS_ENCAPSULATION_FORMAT, *PNDIS_ENCAPSULATION_FORMAT;
  1033. typedef struct _NDIS_TASK_OFFLOAD_HEADER {
  1034. ULONG Version;
  1035. ULONG Size;
  1036. ULONG Reserved;
  1037. ULONG OffsetFirstTask;
  1038. NDIS_ENCAPSULATION_FORMAT EncapsulationFormat;
  1039. } NDIS_TASK_OFFLOAD_HEADER, *PNDIS_TASK_OFFLOAD_HEADER;
  1040. typedef struct _NDIS_TASK_OFFLOAD {
  1041. ULONG Version;
  1042. ULONG Size;
  1043. NDIS_TASK Task;
  1044. ULONG OffsetNextTask;
  1045. ULONG TaskBufferLength;
  1046. UCHAR TaskBuffer[1];
  1047. } NDIS_TASK_OFFLOAD, *PNDIS_TASK_OFFLOAD;
  1048. typedef struct _NDIS_TASK_TCP_IP_CHECKSUM {
  1049. struct {
  1050. ULONG IpOptionsSupported:1;
  1051. ULONG TcpOptionsSupported:1;
  1052. ULONG TcpChecksum:1;
  1053. ULONG UdpChecksum:1;
  1054. ULONG IpChecksum:1;
  1055. } V4Transmit;
  1056. struct {
  1057. ULONG IpOptionsSupported:1;
  1058. ULONG TcpOptionsSupported:1;
  1059. ULONG TcpChecksum:1;
  1060. ULONG UdpChecksum:1;
  1061. ULONG IpChecksum:1;
  1062. } V4Receive;
  1063. struct {
  1064. ULONG IpOptionsSupported:1;
  1065. ULONG TcpOptionsSupported:1;
  1066. ULONG TcpChecksum:1;
  1067. ULONG UdpChecksum:1;
  1068. } V6Transmit;
  1069. struct {
  1070. ULONG IpOptionsSupported:1;
  1071. ULONG TcpOptionsSupported:1;
  1072. ULONG TcpChecksum:1;
  1073. ULONG UdpChecksum:1;
  1074. } V6Receive;
  1075. } NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM;
  1076. #define NDIS_TASK_TCP_LARGE_SEND_V0 0
  1077. typedef struct _NDIS_TASK_TCP_LARGE_SEND {
  1078. ULONG Version;
  1079. ULONG MaxOffLoadSize;
  1080. ULONG MinSegmentCount;
  1081. BOOLEAN TcpOptions;
  1082. BOOLEAN IpOptions;
  1083. } NDIS_TASK_TCP_LARGE_SEND, *PNDIS_TASK_TCP_LARGE_SEND;
  1084. typedef struct _NDIS_TASK_IPSEC {
  1085. struct {
  1086. ULONG AH_ESP_COMBINED;
  1087. ULONG TRANSPORT_TUNNEL_COMBINED;
  1088. ULONG V4_OPTIONS;
  1089. ULONG RESERVED;
  1090. } Supported;
  1091. struct {
  1092. ULONG MD5:1;
  1093. ULONG SHA_1:1;
  1094. ULONG Transport:1;
  1095. ULONG Tunnel:1;
  1096. ULONG Send:1;
  1097. ULONG Receive:1;
  1098. } V4AH;
  1099. struct {
  1100. ULONG DES:1;
  1101. ULONG RESERVED:1;
  1102. ULONG TRIPLE_DES:1;
  1103. ULONG NULL_ESP:1;
  1104. ULONG Transport:1;
  1105. ULONG Tunnel:1;
  1106. ULONG Send:1;
  1107. ULONG Receive:1;
  1108. } V4ESP;
  1109. } NDIS_TASK_IPSEC, *PNDIS_TASK_IPSEC;
  1110. #endif /* NDIS_LEGACY_DRIVER */
  1111. #define IPSEC_TPT_UDPESP_ENCAPTYPE_IKE 0x00000001
  1112. #define IPSEC_TUN_UDPESP_ENCAPTYPE_IKE 0x00000002
  1113. #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_IKE 0x00000004
  1114. #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_IKE 0x00000008
  1115. #define IPSEC_TPT_UDPESP_ENCAPTYPE_OTHER 0x00000010
  1116. #define IPSEC_TUN_UDPESP_ENCAPTYPE_OTHER 0x00000020
  1117. #define IPSEC_TPTOVERTUN_UDPESP_ENCAPTYPE_OTHER 0x00000040
  1118. #define IPSEC_TPT_UDPESP_OVER_PURE_TUN_ENCAPTYPE_OTHER 0x00000080
  1119. #if NDIS_LEGACY_DRIVER
  1120. /*
  1121. * PNDIS_PACKET
  1122. * NDIS_GET_ORIGINAL_PACKET(
  1123. * IN PNDIS_PACKET Packet);
  1124. */
  1125. #define NDIS_GET_ORIGINAL_PACKET(Packet) \
  1126. NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo)
  1127. /*
  1128. * PVOID
  1129. * NDIS_GET_PACKET_CANCEL_ID(
  1130. * IN PNDIS_PACKET Packet);
  1131. */
  1132. #define NDIS_GET_PACKET_CANCEL_ID(Packet) \
  1133. NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId)
  1134. /*
  1135. * PNDIS_PACKET_EXTENSION
  1136. * NDIS_PACKET_EXTENSION_FROM_PACKET(
  1137. * IN PNDIS_PACKET Packet);
  1138. */
  1139. #define NDIS_PACKET_EXTENSION_FROM_PACKET(Packet) \
  1140. ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) \
  1141. + (Packet)->Private.NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA)))
  1142. /*
  1143. * PVOID
  1144. * NDIS_PER_PACKET_INFO_FROM_PACKET(
  1145. * IN OUT PNDIS_PACKET Packet,
  1146. * IN NDIS_PER_PACKET_INFO InfoType);
  1147. */
  1148. #define NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, InfoType) \
  1149. ((PNDIS_PACKET_EXTENSION)((PUCHAR)(Packet) + (Packet)->Private.NdisPacketOobOffset \
  1150. + sizeof(NDIS_PACKET_OOB_DATA)))->NdisPacketInfo[(InfoType)]
  1151. /*
  1152. * VOID
  1153. * NDIS_SET_ORIGINAL_PACKET(
  1154. * IN OUT PNDIS_PACKET Packet,
  1155. * IN PNDIS_PACKET OriginalPacket);
  1156. */
  1157. #define NDIS_SET_ORIGINAL_PACKET(Packet, OriginalPacket) \
  1158. NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, OriginalPacketInfo) = (OriginalPacket)
  1159. /*
  1160. * VOID
  1161. * NDIS_SET_PACKET_CANCEL_ID(
  1162. * IN PNDIS_PACKET Packet
  1163. * IN ULONG_PTR CancelId);
  1164. */
  1165. #define NDIS_SET_PACKET_CANCEL_ID(Packet, CancelId) \
  1166. NDIS_PER_PACKET_INFO_FROM_PACKET(Packet, PacketCancelId) = (CancelId)
  1167. #define NdisSetPacketCancelId(_Packet, _CancelId) NDIS_SET_PACKET_CANCEL_ID(_Packet, _CancelId)
  1168. #define NdisGetPacketCancelId(_Packet) NDIS_GET_PACKET_CANCEL_ID(_Packet)
  1169. #endif /* NDIS_LEGACY_DRIVER */
  1170. #if NDIS_SUPPORT_NDIS6
  1171. typedef struct _NDIS_GENERIC_OBJECT {
  1172. NDIS_OBJECT_HEADER Header;
  1173. PVOID Caller;
  1174. PVOID CallersCaller;
  1175. PDRIVER_OBJECT DriverObject;
  1176. } NDIS_GENERIC_OBJECT, *PNDIS_GENERIC_OBJECT;
  1177. #endif
  1178. /* NDIS_TASK_OFFLOAD_HEADER.Version constants */
  1179. #define NDIS_TASK_OFFLOAD_VERSION 1
  1180. #define MAX_HASHES 4
  1181. #define TRUNCATED_HASH_LEN 12
  1182. #define CRYPTO_SUCCESS 0
  1183. #define CRYPTO_GENERIC_ERROR 1
  1184. #define CRYPTO_TRANSPORT_AH_AUTH_FAILED 2
  1185. #define CRYPTO_TRANSPORT_ESP_AUTH_FAILED 3
  1186. #define CRYPTO_TUNNEL_AH_AUTH_FAILED 4
  1187. #define CRYPTO_TUNNEL_ESP_AUTH_FAILED 5
  1188. #define CRYPTO_INVALID_PACKET_SYNTAX 6
  1189. #define CRYPTO_INVALID_PROTOCOL 7
  1190. typedef struct _NDIS_TCP_IP_CHECKSUM_PACKET_INFO {
  1191. __MINGW_EXTENSION union {
  1192. struct {
  1193. ULONG NdisPacketChecksumV4:1;
  1194. ULONG NdisPacketChecksumV6:1;
  1195. ULONG NdisPacketTcpChecksum:1;
  1196. ULONG NdisPacketUdpChecksum:1;
  1197. ULONG NdisPacketIpChecksum:1;
  1198. } Transmit;
  1199. struct {
  1200. ULONG NdisPacketTcpChecksumFailed:1;
  1201. ULONG NdisPacketUdpChecksumFailed:1;
  1202. ULONG NdisPacketIpChecksumFailed:1;
  1203. ULONG NdisPacketTcpChecksumSucceeded:1;
  1204. ULONG NdisPacketUdpChecksumSucceeded:1;
  1205. ULONG NdisPacketIpChecksumSucceeded:1;
  1206. ULONG NdisPacketLoopback:1;
  1207. } Receive;
  1208. ULONG Value;
  1209. };
  1210. } NDIS_TCP_IP_CHECKSUM_PACKET_INFO, *PNDIS_TCP_IP_CHECKSUM_PACKET_INFO;
  1211. typedef struct _NDIS_WAN_CO_FRAGMENT {
  1212. ULONG Errors;
  1213. } NDIS_WAN_CO_FRAGMENT, *PNDIS_WAN_CO_FRAGMENT;
  1214. typedef struct _NDIS_WAN_FRAGMENT {
  1215. UCHAR RemoteAddress[6];
  1216. UCHAR LocalAddress[6];
  1217. } NDIS_WAN_FRAGMENT, *PNDIS_WAN_FRAGMENT;
  1218. typedef struct _WAN_CO_LINKPARAMS {
  1219. ULONG TransmitSpeed;
  1220. ULONG ReceiveSpeed;
  1221. ULONG SendWindow;
  1222. } WAN_CO_LINKPARAMS, *PWAN_CO_LINKPARAMS;
  1223. typedef struct _NDIS_WAN_GET_STATS {
  1224. UCHAR LocalAddress[6];
  1225. ULONG BytesSent;
  1226. ULONG BytesRcvd;
  1227. ULONG FramesSent;
  1228. ULONG FramesRcvd;
  1229. ULONG CRCErrors;
  1230. ULONG TimeoutErrors;
  1231. ULONG AlignmentErrors;
  1232. ULONG SerialOverrunErrors;
  1233. ULONG FramingErrors;
  1234. ULONG BufferOverrunErrors;
  1235. ULONG BytesTransmittedUncompressed;
  1236. ULONG BytesReceivedUncompressed;
  1237. ULONG BytesTransmittedCompressed;
  1238. ULONG BytesReceivedCompressed;
  1239. } NDIS_WAN_GET_STATS, *PNDIS_WAN_GET_STATS;
  1240. /* Call Manager */
  1241. typedef VOID
  1242. (NTAPI *CM_ACTIVATE_VC_COMPLETE_HANDLER)(
  1243. IN NDIS_STATUS Status,
  1244. IN NDIS_HANDLE CallMgrVcContext,
  1245. IN PCO_CALL_PARAMETERS CallParameters);
  1246. typedef NDIS_STATUS
  1247. (NTAPI *CM_ADD_PARTY_HANDLER)(
  1248. IN NDIS_HANDLE CallMgrVcContext,
  1249. IN OUT PCO_CALL_PARAMETERS CallParameters,
  1250. IN NDIS_HANDLE NdisPartyHandle,
  1251. OUT PNDIS_HANDLE CallMgrPartyContext);
  1252. typedef NDIS_STATUS
  1253. (NTAPI *CM_CLOSE_AF_HANDLER)(
  1254. IN NDIS_HANDLE CallMgrAfContext);
  1255. typedef NDIS_STATUS
  1256. (NTAPI *CM_CLOSE_CALL_HANDLER)(
  1257. IN NDIS_HANDLE CallMgrVcContext,
  1258. IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
  1259. IN PVOID CloseData OPTIONAL,
  1260. IN UINT Size OPTIONAL);
  1261. typedef NDIS_STATUS
  1262. (NTAPI *CM_DEREG_SAP_HANDLER)(
  1263. IN NDIS_HANDLE CallMgrSapContext);
  1264. typedef VOID
  1265. (NTAPI *CM_DEACTIVATE_VC_COMPLETE_HANDLER)(
  1266. IN NDIS_STATUS Status,
  1267. IN NDIS_HANDLE CallMgrVcContext);
  1268. typedef NDIS_STATUS
  1269. (NTAPI *CM_DROP_PARTY_HANDLER)(
  1270. IN NDIS_HANDLE CallMgrPartyContext,
  1271. IN PVOID CloseData OPTIONAL,
  1272. IN UINT Size OPTIONAL);
  1273. typedef VOID
  1274. (NTAPI *CM_INCOMING_CALL_COMPLETE_HANDLER)(
  1275. IN NDIS_STATUS Status,
  1276. IN NDIS_HANDLE CallMgrVcContext,
  1277. IN PCO_CALL_PARAMETERS CallParameters);
  1278. typedef NDIS_STATUS
  1279. (NTAPI *CM_MAKE_CALL_HANDLER)(
  1280. IN NDIS_HANDLE CallMgrVcContext,
  1281. IN OUT PCO_CALL_PARAMETERS CallParameters,
  1282. IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
  1283. OUT PNDIS_HANDLE CallMgrPartyContext OPTIONAL);
  1284. typedef NDIS_STATUS
  1285. (NTAPI *CM_MODIFY_CALL_QOS_HANDLER)(
  1286. IN NDIS_HANDLE CallMgrVcContext,
  1287. IN PCO_CALL_PARAMETERS CallParameters);
  1288. typedef NDIS_STATUS
  1289. (NTAPI *CM_OPEN_AF_HANDLER)(
  1290. IN NDIS_HANDLE CallMgrBindingContext,
  1291. IN PCO_ADDRESS_FAMILY AddressFamily,
  1292. IN NDIS_HANDLE NdisAfHandle,
  1293. OUT PNDIS_HANDLE CallMgrAfContext);
  1294. typedef NDIS_STATUS
  1295. (NTAPI *CM_REG_SAP_HANDLER)(
  1296. IN NDIS_HANDLE CallMgrAfContext,
  1297. IN PCO_SAP Sap,
  1298. IN NDIS_HANDLE NdisSapHandle,
  1299. OUT PNDIS_HANDLE CallMgrSapContext);
  1300. typedef NDIS_STATUS
  1301. (NTAPI *CO_CREATE_VC_HANDLER)(
  1302. IN NDIS_HANDLE ProtocolAfContext,
  1303. IN NDIS_HANDLE NdisVcHandle,
  1304. OUT PNDIS_HANDLE ProtocolVcContext);
  1305. typedef NDIS_STATUS
  1306. (NTAPI *CO_DELETE_VC_HANDLER)(
  1307. IN NDIS_HANDLE ProtocolVcContext);
  1308. #define PROTOCOL_RESERVED_SIZE_IN_PACKET (4 * sizeof(PVOID))
  1309. /* Prototypes for NDIS 5.0 protocol characteristics */
  1310. typedef VOID
  1311. (NTAPI *CO_SEND_COMPLETE_HANDLER)(
  1312. IN NDIS_STATUS Status,
  1313. IN NDIS_HANDLE ProtocolVcContext,
  1314. IN PNDIS_PACKET Packet);
  1315. typedef VOID
  1316. (NTAPI *CO_STATUS_HANDLER)(
  1317. IN NDIS_HANDLE ProtocolBindingContext,
  1318. IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
  1319. IN NDIS_STATUS GeneralStatus,
  1320. IN PVOID StatusBuffer,
  1321. IN UINT StatusBufferSize);
  1322. typedef UINT
  1323. (NTAPI *CO_RECEIVE_PACKET_HANDLER)(
  1324. IN NDIS_HANDLE ProtocolBindingContext,
  1325. IN NDIS_HANDLE ProtocolVcContext,
  1326. IN PNDIS_PACKET Packet);
  1327. typedef NDIS_STATUS
  1328. (NTAPI *CO_REQUEST_HANDLER)(
  1329. IN NDIS_HANDLE ProtocolAfContext,
  1330. IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
  1331. IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
  1332. IN OUT PNDIS_REQUEST NdisRequest);
  1333. typedef VOID
  1334. (NTAPI *CO_REQUEST_COMPLETE_HANDLER)(
  1335. IN NDIS_STATUS Status,
  1336. IN NDIS_HANDLE ProtocolAfContext OPTIONAL,
  1337. IN NDIS_HANDLE ProtocolVcContext OPTIONAL,
  1338. IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
  1339. IN PNDIS_REQUEST NdisRequest);
  1340. typedef struct _NDIS_CALL_MANAGER_CHARACTERISTICS {
  1341. UCHAR MajorVersion;
  1342. UCHAR MinorVersion;
  1343. USHORT Filler;
  1344. UINT Reserved;
  1345. CO_CREATE_VC_HANDLER CmCreateVcHandler;
  1346. CO_DELETE_VC_HANDLER CmDeleteVcHandler;
  1347. CM_OPEN_AF_HANDLER CmOpenAfHandler;
  1348. CM_CLOSE_AF_HANDLER CmCloseAfHandler;
  1349. CM_REG_SAP_HANDLER CmRegisterSapHandler;
  1350. CM_DEREG_SAP_HANDLER CmDeregisterSapHandler;
  1351. CM_MAKE_CALL_HANDLER CmMakeCallHandler;
  1352. CM_CLOSE_CALL_HANDLER CmCloseCallHandler;
  1353. CM_INCOMING_CALL_COMPLETE_HANDLER CmIncomingCallCompleteHandler;
  1354. CM_ADD_PARTY_HANDLER CmAddPartyHandler;
  1355. CM_DROP_PARTY_HANDLER CmDropPartyHandler;
  1356. CM_ACTIVATE_VC_COMPLETE_HANDLER CmActivateVcCompleteHandler;
  1357. CM_DEACTIVATE_VC_COMPLETE_HANDLER CmDeactivateVcCompleteHandler;
  1358. CM_MODIFY_CALL_QOS_HANDLER CmModifyCallQoSHandler;
  1359. CO_REQUEST_HANDLER CmRequestHandler;
  1360. CO_REQUEST_COMPLETE_HANDLER CmRequestCompleteHandler;
  1361. } NDIS_CALL_MANAGER_CHARACTERISTICS, *PNDIS_CALL_MANAGER_CHARACTERISTICS;
  1362. /* Call Manager clients */
  1363. typedef VOID (*CL_OPEN_AF_COMPLETE_HANDLER)(
  1364. IN NDIS_STATUS Status,
  1365. IN NDIS_HANDLE ProtocolAfContext,
  1366. IN NDIS_HANDLE NdisAfHandle);
  1367. typedef VOID
  1368. (NTAPI *CL_CLOSE_AF_COMPLETE_HANDLER)(
  1369. IN NDIS_STATUS Status,
  1370. IN NDIS_HANDLE ProtocolAfContext);
  1371. typedef VOID
  1372. (NTAPI *CL_REG_SAP_COMPLETE_HANDLER)(
  1373. IN NDIS_STATUS Status,
  1374. IN NDIS_HANDLE ProtocolSapContext,
  1375. IN PCO_SAP Sap,
  1376. IN NDIS_HANDLE NdisSapHandle);
  1377. typedef VOID
  1378. (NTAPI *CL_DEREG_SAP_COMPLETE_HANDLER)(
  1379. IN NDIS_STATUS Status,
  1380. IN NDIS_HANDLE ProtocolSapContext);
  1381. typedef VOID
  1382. (NTAPI *CL_MAKE_CALL_COMPLETE_HANDLER)(
  1383. IN NDIS_STATUS Status,
  1384. IN NDIS_HANDLE ProtocolVcContext,
  1385. IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
  1386. IN PCO_CALL_PARAMETERS CallParameters);
  1387. typedef VOID
  1388. (NTAPI *CL_MODIFY_CALL_QOS_COMPLETE_HANDLER)(
  1389. IN NDIS_STATUS Status,
  1390. IN NDIS_HANDLE ProtocolVcContext,
  1391. IN PCO_CALL_PARAMETERS CallParameters);
  1392. typedef VOID
  1393. (NTAPI *CL_CLOSE_CALL_COMPLETE_HANDLER)(
  1394. IN NDIS_STATUS Status,
  1395. IN NDIS_HANDLE ProtocolVcContext,
  1396. IN NDIS_HANDLE ProtocolPartyContext OPTIONAL);
  1397. typedef VOID
  1398. (NTAPI *CL_ADD_PARTY_COMPLETE_HANDLER)(
  1399. IN NDIS_STATUS Status,
  1400. IN NDIS_HANDLE ProtocolPartyContext,
  1401. IN NDIS_HANDLE NdisPartyHandle,
  1402. IN PCO_CALL_PARAMETERS CallParameters);
  1403. typedef VOID
  1404. (NTAPI *CL_DROP_PARTY_COMPLETE_HANDLER)(
  1405. IN NDIS_STATUS Status,
  1406. IN NDIS_HANDLE ProtocolPartyContext);
  1407. typedef NDIS_STATUS
  1408. (NTAPI *CL_INCOMING_CALL_HANDLER)(
  1409. IN NDIS_HANDLE ProtocolSapContext,
  1410. IN NDIS_HANDLE ProtocolVcContext,
  1411. IN OUT PCO_CALL_PARAMETERS CallParameters);
  1412. typedef VOID
  1413. (NTAPI *CL_INCOMING_CALL_QOS_CHANGE_HANDLER)(
  1414. IN NDIS_HANDLE ProtocolVcContext,
  1415. IN PCO_CALL_PARAMETERS CallParameters);
  1416. typedef VOID
  1417. (NTAPI *CL_INCOMING_CLOSE_CALL_HANDLER)(
  1418. IN NDIS_STATUS CloseStatus,
  1419. IN NDIS_HANDLE ProtocolVcContext,
  1420. IN PVOID CloseData OPTIONAL,
  1421. IN UINT Size OPTIONAL);
  1422. typedef VOID
  1423. (NTAPI *CL_INCOMING_DROP_PARTY_HANDLER)(
  1424. IN NDIS_STATUS DropStatus,
  1425. IN NDIS_HANDLE ProtocolPartyContext,
  1426. IN PVOID CloseData OPTIONAL,
  1427. IN UINT Size OPTIONAL);
  1428. typedef VOID
  1429. (NTAPI *CL_CALL_CONNECTED_HANDLER)(
  1430. IN NDIS_HANDLE ProtocolVcContext);
  1431. typedef struct _NDIS_CLIENT_CHARACTERISTICS {
  1432. UCHAR MajorVersion;
  1433. UCHAR MinorVersion;
  1434. USHORT Filler;
  1435. UINT Reserved;
  1436. CO_CREATE_VC_HANDLER ClCreateVcHandler;
  1437. CO_DELETE_VC_HANDLER ClDeleteVcHandler;
  1438. CO_REQUEST_HANDLER ClRequestHandler;
  1439. CO_REQUEST_COMPLETE_HANDLER ClRequestCompleteHandler;
  1440. CL_OPEN_AF_COMPLETE_HANDLER ClOpenAfCompleteHandler;
  1441. CL_CLOSE_AF_COMPLETE_HANDLER ClCloseAfCompleteHandler;
  1442. CL_REG_SAP_COMPLETE_HANDLER ClRegisterSapCompleteHandler;
  1443. CL_DEREG_SAP_COMPLETE_HANDLER ClDeregisterSapCompleteHandler;
  1444. CL_MAKE_CALL_COMPLETE_HANDLER ClMakeCallCompleteHandler;
  1445. CL_MODIFY_CALL_QOS_COMPLETE_HANDLER ClModifyCallQoSCompleteHandler;
  1446. CL_CLOSE_CALL_COMPLETE_HANDLER ClCloseCallCompleteHandler;
  1447. CL_ADD_PARTY_COMPLETE_HANDLER ClAddPartyCompleteHandler;
  1448. CL_DROP_PARTY_COMPLETE_HANDLER ClDropPartyCompleteHandler;
  1449. CL_INCOMING_CALL_HANDLER ClIncomingCallHandler;
  1450. CL_INCOMING_CALL_QOS_CHANGE_HANDLER ClIncomingCallQoSChangeHandler;
  1451. CL_INCOMING_CLOSE_CALL_HANDLER ClIncomingCloseCallHandler;
  1452. CL_INCOMING_DROP_PARTY_HANDLER ClIncomingDropPartyHandler;
  1453. CL_CALL_CONNECTED_HANDLER ClCallConnectedHandler;
  1454. } NDIS_CLIENT_CHARACTERISTICS, *PNDIS_CLIENT_CHARACTERISTICS;
  1455. /* NDIS protocol structures */
  1456. /* Prototypes for NDIS 3.0 protocol characteristics */
  1457. typedef VOID
  1458. (NTAPI *OPEN_ADAPTER_COMPLETE_HANDLER)(
  1459. IN NDIS_HANDLE ProtocolBindingContext,
  1460. IN NDIS_STATUS Status,
  1461. IN NDIS_STATUS OpenErrorStatus);
  1462. typedef VOID
  1463. (NTAPI *CLOSE_ADAPTER_COMPLETE_HANDLER)(
  1464. IN NDIS_HANDLE ProtocolBindingContext,
  1465. IN NDIS_STATUS Status);
  1466. typedef VOID
  1467. (NTAPI *RESET_COMPLETE_HANDLER)(
  1468. IN NDIS_HANDLE ProtocolBindingContext,
  1469. IN NDIS_STATUS Status);
  1470. typedef VOID
  1471. (NTAPI *REQUEST_COMPLETE_HANDLER)(
  1472. IN NDIS_HANDLE ProtocolBindingContext,
  1473. IN PNDIS_REQUEST NdisRequest,
  1474. IN NDIS_STATUS Status);
  1475. typedef VOID
  1476. (NTAPI *STATUS_HANDLER)(
  1477. IN NDIS_HANDLE ProtocolBindingContext,
  1478. IN NDIS_STATUS GeneralStatus,
  1479. IN PVOID StatusBuffer,
  1480. IN UINT StatusBufferSize);
  1481. typedef VOID
  1482. (NTAPI *STATUS_COMPLETE_HANDLER)(
  1483. IN NDIS_HANDLE ProtocolBindingContext);
  1484. typedef VOID
  1485. (NTAPI *SEND_COMPLETE_HANDLER)(
  1486. IN NDIS_HANDLE ProtocolBindingContext,
  1487. IN PNDIS_PACKET Packet,
  1488. IN NDIS_STATUS Status);
  1489. typedef VOID
  1490. (NTAPI *WAN_SEND_COMPLETE_HANDLER)(
  1491. IN NDIS_HANDLE ProtocolBindingContext,
  1492. IN PNDIS_WAN_PACKET Packet,
  1493. IN NDIS_STATUS Status);
  1494. typedef VOID
  1495. (NTAPI *TRANSFER_DATA_COMPLETE_HANDLER)(
  1496. IN NDIS_HANDLE ProtocolBindingContext,
  1497. IN PNDIS_PACKET Packet,
  1498. IN NDIS_STATUS Status,
  1499. IN UINT BytesTransferred);
  1500. typedef VOID
  1501. (NTAPI *WAN_TRANSFER_DATA_COMPLETE_HANDLER)(
  1502. VOID);
  1503. typedef NDIS_STATUS
  1504. (NTAPI *RECEIVE_HANDLER)(
  1505. IN NDIS_HANDLE ProtocolBindingContext,
  1506. IN NDIS_HANDLE MacReceiveContext,
  1507. IN PVOID HeaderBuffer,
  1508. IN UINT HeaderBufferSize,
  1509. IN PVOID LookAheadBuffer,
  1510. IN UINT LookaheadBufferSize,
  1511. IN UINT PacketSize);
  1512. typedef NDIS_STATUS
  1513. (NTAPI *WAN_RECEIVE_HANDLER)(
  1514. IN NDIS_HANDLE NdisLinkHandle,
  1515. IN PUCHAR Packet,
  1516. IN ULONG PacketSize);
  1517. typedef VOID
  1518. (NTAPI *RECEIVE_COMPLETE_HANDLER)(
  1519. IN NDIS_HANDLE ProtocolBindingContext);
  1520. /* Protocol characteristics for NDIS 3.0 protocols */
  1521. #define NDIS30_PROTOCOL_CHARACTERISTICS_S \
  1522. UCHAR MajorNdisVersion; \
  1523. UCHAR MinorNdisVersion; \
  1524. USHORT Filler; \
  1525. _ANONYMOUS_UNION union { \
  1526. UINT Reserved; \
  1527. UINT Flags; \
  1528. } DUMMYUNIONNAME; \
  1529. OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler; \
  1530. CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler; \
  1531. _ANONYMOUS_UNION union { \
  1532. SEND_COMPLETE_HANDLER SendCompleteHandler; \
  1533. WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler; \
  1534. } DUMMYUNIONNAME2; \
  1535. _ANONYMOUS_UNION union { \
  1536. TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
  1537. WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler; \
  1538. } DUMMYUNIONNAME3; \
  1539. RESET_COMPLETE_HANDLER ResetCompleteHandler; \
  1540. REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
  1541. _ANONYMOUS_UNION union { \
  1542. RECEIVE_HANDLER ReceiveHandler; \
  1543. WAN_RECEIVE_HANDLER WanReceiveHandler; \
  1544. } DUMMYUNIONNAME4; \
  1545. RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
  1546. STATUS_HANDLER StatusHandler; \
  1547. STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
  1548. NDIS_STRING Name;
  1549. typedef struct _NDIS30_PROTOCOL_CHARACTERISTICS {
  1550. NDIS30_PROTOCOL_CHARACTERISTICS_S
  1551. } NDIS30_PROTOCOL_CHARACTERISTICS, *PNDIS30_PROTOCOL_CHARACTERISTICS;
  1552. /* Prototypes for NDIS 4.0 protocol characteristics */
  1553. typedef INT
  1554. (NTAPI *RECEIVE_PACKET_HANDLER)(
  1555. IN NDIS_HANDLE ProtocolBindingContext,
  1556. IN PNDIS_PACKET Packet);
  1557. typedef VOID
  1558. (NTAPI *BIND_HANDLER)(
  1559. OUT PNDIS_STATUS Status,
  1560. IN NDIS_HANDLE BindContext,
  1561. IN PNDIS_STRING DeviceName,
  1562. IN PVOID SystemSpecific1,
  1563. IN PVOID SystemSpecific2);
  1564. typedef VOID
  1565. (NTAPI *UNBIND_HANDLER)(
  1566. OUT PNDIS_STATUS Status,
  1567. IN NDIS_HANDLE ProtocolBindingContext,
  1568. IN NDIS_HANDLE UnbindContext);
  1569. typedef NDIS_STATUS
  1570. (NTAPI *PNP_EVENT_HANDLER)(
  1571. IN NDIS_HANDLE ProtocolBindingContext,
  1572. IN PNET_PNP_EVENT NetPnPEvent);
  1573. typedef VOID
  1574. (NTAPI *UNLOAD_PROTOCOL_HANDLER)(
  1575. VOID);
  1576. /* Protocol characteristics for NDIS 4.0 protocols */
  1577. typedef struct _NDIS40_PROTOCOL_CHARACTERISTICS {
  1578. UCHAR MajorNdisVersion;
  1579. UCHAR MinorNdisVersion;
  1580. USHORT Filler;
  1581. __MINGW_EXTENSION union {
  1582. UINT Reserved;
  1583. UINT Flags;
  1584. };
  1585. OPEN_ADAPTER_COMPLETE_HANDLER OpenAdapterCompleteHandler;
  1586. CLOSE_ADAPTER_COMPLETE_HANDLER CloseAdapterCompleteHandler;
  1587. __MINGW_EXTENSION union {
  1588. SEND_COMPLETE_HANDLER SendCompleteHandler;
  1589. WAN_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
  1590. };
  1591. __MINGW_EXTENSION union {
  1592. TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
  1593. WAN_TRANSFER_DATA_COMPLETE_HANDLER WanTransferDataCompleteHandler;
  1594. };
  1595. RESET_COMPLETE_HANDLER ResetCompleteHandler;
  1596. REQUEST_COMPLETE_HANDLER RequestCompleteHandler;
  1597. __MINGW_EXTENSION union {
  1598. RECEIVE_HANDLER ReceiveHandler;
  1599. WAN_RECEIVE_HANDLER WanReceiveHandler;
  1600. };
  1601. RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler;
  1602. STATUS_HANDLER StatusHandler;
  1603. STATUS_COMPLETE_HANDLER StatusCompleteHandler;
  1604. NDIS_STRING Name;
  1605. RECEIVE_PACKET_HANDLER ReceivePacketHandler;
  1606. BIND_HANDLER BindAdapterHandler;
  1607. UNBIND_HANDLER UnbindAdapterHandler;
  1608. PNP_EVENT_HANDLER PnPEventHandler;
  1609. UNLOAD_PROTOCOL_HANDLER UnloadHandler;
  1610. } NDIS40_PROTOCOL_CHARACTERISTICS;
  1611. typedef VOID
  1612. (NTAPI PROTCOL_CO_AF_REGISTER_NOTIFY)(
  1613. IN NDIS_HANDLE ProtocolBindingContext,
  1614. IN PCO_ADDRESS_FAMILY AddressFamily);
  1615. typedef PROTCOL_CO_AF_REGISTER_NOTIFY *CO_AF_REGISTER_NOTIFY_HANDLER;
  1616. #if NDIS_LEGACY_PROTOCOL
  1617. typedef struct _NDIS50_PROTOCOL_CHARACTERISTICS {
  1618. #ifdef __cplusplus
  1619. NDIS40_PROTOCOL_CHARACTERISTICS Ndis40Chars;
  1620. #else
  1621. NDIS40_PROTOCOL_CHARACTERISTICS;
  1622. #endif
  1623. PVOID ReservedHandlers[4];
  1624. CO_SEND_COMPLETE_HANDLER CoSendCompleteHandler;
  1625. CO_STATUS_HANDLER CoStatusHandler;
  1626. CO_RECEIVE_PACKET_HANDLER CoReceivePacketHandler;
  1627. CO_AF_REGISTER_NOTIFY_HANDLER CoAfRegisterNotifyHandler;
  1628. } NDIS50_PROTOCOL_CHARACTERISTICS;
  1629. #if (defined(NDIS50) || defined(NDIS51))
  1630. typedef NDIS50_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
  1631. #else
  1632. typedef NDIS40_PROTOCOL_CHARACTERISTICS NDIS_PROTOCOL_CHARACTERISTICS;
  1633. #endif
  1634. typedef NDIS_PROTOCOL_CHARACTERISTICS *PNDIS_PROTOCOL_CHARACTERISTICS;
  1635. #endif /* NDIS_LEGACY_PROTOCOL */
  1636. /* Prototypes for NDIS_MINIPORT_CHARACTERISTICS */
  1637. typedef BOOLEAN
  1638. (NTAPI *W_CHECK_FOR_HANG_HANDLER)(
  1639. IN NDIS_HANDLE MiniportAdapterContext);
  1640. typedef VOID
  1641. (NTAPI *W_DISABLE_INTERRUPT_HANDLER)(
  1642. IN NDIS_HANDLE MiniportAdapterContext);
  1643. typedef VOID
  1644. (NTAPI *W_ENABLE_INTERRUPT_HANDLER)(
  1645. IN NDIS_HANDLE MiniportAdapterContext);
  1646. typedef VOID
  1647. (NTAPI *W_HALT_HANDLER)(
  1648. IN NDIS_HANDLE MiniportAdapterContext);
  1649. typedef VOID
  1650. (NTAPI *W_HANDLE_INTERRUPT_HANDLER)(
  1651. IN NDIS_HANDLE MiniportAdapterContext);
  1652. typedef NDIS_STATUS
  1653. (NTAPI *W_INITIALIZE_HANDLER)(
  1654. OUT PNDIS_STATUS OpenErrorStatus,
  1655. OUT PUINT SelectedMediumIndex,
  1656. IN PNDIS_MEDIUM MediumArray,
  1657. IN UINT MediumArraySize,
  1658. IN NDIS_HANDLE MiniportAdapterContext,
  1659. IN NDIS_HANDLE WrapperConfigurationContext);
  1660. typedef VOID
  1661. (NTAPI *W_ISR_HANDLER)(
  1662. OUT PBOOLEAN InterruptRecognized,
  1663. OUT PBOOLEAN QueueMiniportHandleInterrupt,
  1664. IN NDIS_HANDLE MiniportAdapterContext);
  1665. typedef NDIS_STATUS
  1666. (NTAPI *W_QUERY_INFORMATION_HANDLER)(
  1667. IN NDIS_HANDLE MiniportAdapterContext,
  1668. IN NDIS_OID Oid,
  1669. IN PVOID InformationBuffer,
  1670. IN ULONG InformationBufferLength,
  1671. OUT PULONG BytesWritten,
  1672. OUT PULONG BytesNeeded);
  1673. typedef NDIS_STATUS
  1674. (NTAPI *W_RECONFIGURE_HANDLER)(
  1675. OUT PNDIS_STATUS OpenErrorStatus,
  1676. IN NDIS_HANDLE MiniportAdapterContext,
  1677. IN NDIS_HANDLE WrapperConfigurationContext);
  1678. typedef NDIS_STATUS
  1679. (NTAPI *W_RESET_HANDLER)(
  1680. OUT PBOOLEAN AddressingReset,
  1681. IN NDIS_HANDLE MiniportAdapterContext);
  1682. typedef NDIS_STATUS
  1683. (NTAPI *W_SEND_HANDLER)(
  1684. IN NDIS_HANDLE MiniportAdapterContext,
  1685. IN PNDIS_PACKET Packet,
  1686. IN UINT Flags);
  1687. typedef NDIS_STATUS
  1688. (NTAPI *WM_SEND_HANDLER)(
  1689. IN NDIS_HANDLE MiniportAdapterContext,
  1690. IN NDIS_HANDLE NdisLinkHandle,
  1691. IN PNDIS_WAN_PACKET Packet);
  1692. typedef NDIS_STATUS
  1693. (NTAPI *W_SET_INFORMATION_HANDLER)(
  1694. IN NDIS_HANDLE MiniportAdapterContext,
  1695. IN NDIS_OID Oid,
  1696. IN PVOID InformationBuffer,
  1697. IN ULONG InformationBufferLength,
  1698. OUT PULONG BytesRead,
  1699. OUT PULONG BytesNeeded);
  1700. typedef NDIS_STATUS
  1701. (NTAPI *W_TRANSFER_DATA_HANDLER)(
  1702. OUT PNDIS_PACKET Packet,
  1703. OUT PUINT BytesTransferred,
  1704. IN NDIS_HANDLE MiniportAdapterContext,
  1705. IN NDIS_HANDLE MiniportReceiveContext,
  1706. IN UINT ByteOffset,
  1707. IN UINT BytesToTransfer);
  1708. typedef NDIS_STATUS
  1709. (NTAPI *WM_TRANSFER_DATA_HANDLER)(
  1710. VOID);
  1711. typedef VOID
  1712. (NTAPI *ADAPTER_SHUTDOWN_HANDLER)(
  1713. IN PVOID ShutdownContext);
  1714. typedef VOID
  1715. (NTAPI *W_RETURN_PACKET_HANDLER)(
  1716. IN NDIS_HANDLE MiniportAdapterContext,
  1717. IN PNDIS_PACKET Packet);
  1718. typedef VOID
  1719. (NTAPI *W_SEND_PACKETS_HANDLER)(
  1720. IN NDIS_HANDLE MiniportAdapterContext,
  1721. IN PPNDIS_PACKET PacketArray,
  1722. IN UINT NumberOfPackets);
  1723. typedef VOID
  1724. (NTAPI *W_ALLOCATE_COMPLETE_HANDLER)(
  1725. IN NDIS_HANDLE MiniportAdapterContext,
  1726. IN PVOID VirtualAddress,
  1727. IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
  1728. IN ULONG Length,
  1729. IN PVOID Context);
  1730. /* NDIS structures available only to miniport drivers */
  1731. #define NDIS30_MINIPORT_CHARACTERISTICS_S \
  1732. UCHAR MajorNdisVersion; \
  1733. UCHAR MinorNdisVersion; \
  1734. UINT Reserved; \
  1735. W_CHECK_FOR_HANG_HANDLER CheckForHangHandler; \
  1736. W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler; \
  1737. W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler; \
  1738. W_HALT_HANDLER HaltHandler; \
  1739. W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler; \
  1740. W_INITIALIZE_HANDLER InitializeHandler; \
  1741. W_ISR_HANDLER ISRHandler; \
  1742. W_QUERY_INFORMATION_HANDLER QueryInformationHandler; \
  1743. W_RECONFIGURE_HANDLER ReconfigureHandler; \
  1744. W_RESET_HANDLER ResetHandler; \
  1745. W_SEND_HANDLER SendHandler; \
  1746. W_SET_INFORMATION_HANDLER SetInformationHandler; \
  1747. W_TRANSFER_DATA_HANDLER TransferDataHandler;
  1748. typedef struct _NDIS30_MINIPORT_CHARACTERISTICS {
  1749. NDIS30_MINIPORT_CHARACTERISTICS_S
  1750. } NDIS30_MINIPORT_CHARACTERISTICS, *PSNDIS30_MINIPORT_CHARACTERISTICS;
  1751. #ifdef __cplusplus
  1752. #define NDIS40_MINIPORT_CHARACTERISTICS_S \
  1753. NDIS30_MINIPORT_CHARACTERISTICS Ndis30Chars; \
  1754. W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
  1755. W_SEND_PACKETS_HANDLER SendPacketsHandler; \
  1756. W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
  1757. #else /* !__cplusplus */
  1758. #define NDIS40_MINIPORT_CHARACTERISTICS_S \
  1759. NDIS30_MINIPORT_CHARACTERISTICS_S \
  1760. W_RETURN_PACKET_HANDLER ReturnPacketHandler; \
  1761. W_SEND_PACKETS_HANDLER SendPacketsHandler; \
  1762. W_ALLOCATE_COMPLETE_HANDLER AllocateCompleteHandler;
  1763. #endif /* !__cplusplus */
  1764. typedef struct _NDIS40_MINIPORT_CHARACTERISTICS {
  1765. NDIS40_MINIPORT_CHARACTERISTICS_S
  1766. } NDIS40_MINIPORT_CHARACTERISTICS, *PNDIS40_MINIPORT_CHARACTERISTICS;
  1767. /* Extensions for NDIS 5.0 miniports */
  1768. typedef NDIS_STATUS
  1769. (NTAPI MINIPORT_CO_CREATE_VC)(
  1770. IN NDIS_HANDLE MiniportAdapterContext,
  1771. IN NDIS_HANDLE NdisVcHandle,
  1772. OUT PNDIS_HANDLE MiniportVcContext);
  1773. typedef MINIPORT_CO_CREATE_VC *W_CO_CREATE_VC_HANDLER;
  1774. typedef NDIS_STATUS
  1775. (NTAPI MINIPORT_CO_DELETE_VC)(
  1776. IN NDIS_HANDLE MiniportVcContext);
  1777. typedef MINIPORT_CO_DELETE_VC *W_CO_DELETE_VC_HANDLER;
  1778. typedef NDIS_STATUS
  1779. (NTAPI MINIPORT_CO_ACTIVATE_VC)(
  1780. IN NDIS_HANDLE MiniportVcContext,
  1781. IN OUT PCO_CALL_PARAMETERS CallParameters);
  1782. typedef MINIPORT_CO_ACTIVATE_VC *W_CO_ACTIVATE_VC_HANDLER;
  1783. typedef NDIS_STATUS
  1784. (NTAPI MINIPORT_CO_DEACTIVATE_VC)(
  1785. IN NDIS_HANDLE MiniportVcContext);
  1786. typedef MINIPORT_CO_DEACTIVATE_VC *W_CO_DEACTIVATE_VC_HANDLER;
  1787. typedef VOID
  1788. (NTAPI *W_CO_SEND_PACKETS_HANDLER)(
  1789. IN NDIS_HANDLE MiniportVcContext,
  1790. IN PPNDIS_PACKET PacketArray,
  1791. IN UINT NumberOfPackets);
  1792. typedef NDIS_STATUS
  1793. (NTAPI *W_CO_REQUEST_HANDLER)(
  1794. IN NDIS_HANDLE MiniportAdapterContext,
  1795. IN NDIS_HANDLE MiniportVcContext OPTIONAL,
  1796. IN OUT PNDIS_REQUEST NdisRequest);
  1797. #ifdef __cplusplus
  1798. #define NDIS50_MINIPORT_CHARACTERISTICS_S \
  1799. NDIS40_MINIPORT_CHARACTERISTICS Ndis40Chars; \
  1800. W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
  1801. W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
  1802. W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
  1803. W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
  1804. W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
  1805. W_CO_REQUEST_HANDLER CoRequestHandler;
  1806. #else /* !__cplusplus */
  1807. #define NDIS50_MINIPORT_CHARACTERISTICS_S \
  1808. NDIS40_MINIPORT_CHARACTERISTICS_S \
  1809. W_CO_CREATE_VC_HANDLER CoCreateVcHandler; \
  1810. W_CO_DELETE_VC_HANDLER CoDeleteVcHandler; \
  1811. W_CO_ACTIVATE_VC_HANDLER CoActivateVcHandler; \
  1812. W_CO_DEACTIVATE_VC_HANDLER CoDeactivateVcHandler; \
  1813. W_CO_SEND_PACKETS_HANDLER CoSendPacketsHandler; \
  1814. W_CO_REQUEST_HANDLER CoRequestHandler;
  1815. #endif /* !__cplusplus */
  1816. typedef struct _NDIS50_MINIPORT_CHARACTERISTICS {
  1817. NDIS50_MINIPORT_CHARACTERISTICS_S
  1818. } NDIS50_MINIPORT_CHARACTERISTICS, *PSNDIS50_MINIPORT_CHARACTERISTICS;
  1819. /* Extensions for NDIS 5.1 miniports */
  1820. typedef VOID
  1821. (NTAPI *W_CANCEL_SEND_PACKETS_HANDLER)(
  1822. IN NDIS_HANDLE MiniportAdapterContext,
  1823. IN PVOID CancelId);
  1824. typedef VOID
  1825. (NTAPI *W_PNP_EVENT_NOTIFY_HANDLER)(
  1826. IN NDIS_HANDLE MiniportAdapterContext,
  1827. IN NDIS_DEVICE_PNP_EVENT PnPEvent,
  1828. IN PVOID InformationBuffer,
  1829. IN ULONG InformationBufferLength);
  1830. typedef VOID
  1831. (NTAPI *W_MINIPORT_SHUTDOWN_HANDLER)(
  1832. IN PVOID ShutdownContext);
  1833. #ifdef __cplusplus
  1834. #define NDIS51_MINIPORT_CHARACTERISTICS_S \
  1835. NDIS50_MINIPORT_CHARACTERISTICS Ndis50Chars; \
  1836. W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
  1837. W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
  1838. W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler; \
  1839. PVOID Reserved1; \
  1840. PVOID Reserved2; \
  1841. PVOID Reserved3; \
  1842. PVOID Reserved4;
  1843. #else
  1844. #define NDIS51_MINIPORT_CHARACTERISTICS_S \
  1845. NDIS50_MINIPORT_CHARACTERISTICS_S \
  1846. W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
  1847. W_PNP_EVENT_NOTIFY_HANDLER PnPEventNotifyHandler; \
  1848. W_MINIPORT_SHUTDOWN_HANDLER AdapterShutdownHandler; \
  1849. PVOID Reserved1; \
  1850. PVOID Reserved2; \
  1851. PVOID Reserved3; \
  1852. PVOID Reserved4;
  1853. #endif
  1854. typedef struct _NDIS51_MINIPORT_CHARACTERISTICS {
  1855. NDIS51_MINIPORT_CHARACTERISTICS_S
  1856. } NDIS51_MINIPORT_CHARACTERISTICS, *PSNDIS51_MINIPORT_CHARACTERISTICS;
  1857. #if defined(NDIS51_MINIPORT)
  1858. typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
  1859. NDIS51_MINIPORT_CHARACTERISTICS_S
  1860. } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
  1861. #elif defined(NDIS50_MINIPORT)
  1862. typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
  1863. NDIS50_MINIPORT_CHARACTERISTICS_S
  1864. } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
  1865. #elif defined(NDIS40_MINIPORT)
  1866. typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
  1867. NDIS40_MINIPORT_CHARACTERISTICS_S
  1868. } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
  1869. #else /* NDIS30 */
  1870. typedef struct _NDIS_MINIPORT_CHARACTERISTICS {
  1871. NDIS30_MINIPORT_CHARACTERISTICS_S
  1872. } NDIS_MINIPORT_CHARACTERISTICS, *PNDIS_MINIPORT_CHARACTERISTICS;
  1873. #endif
  1874. typedef struct _NDIS_MINIPORT_INTERRUPT {
  1875. PKINTERRUPT InterruptObject;
  1876. KSPIN_LOCK DpcCountLock;
  1877. PVOID Reserved;
  1878. W_ISR_HANDLER MiniportIsr;
  1879. W_HANDLE_INTERRUPT_HANDLER MiniportDpc;
  1880. KDPC InterruptDpc;
  1881. PNDIS_MINIPORT_BLOCK Miniport;
  1882. UCHAR DpcCount;
  1883. BOOLEAN Filler1;
  1884. KEVENT DpcsCompletedEvent;
  1885. BOOLEAN SharedInterrupt;
  1886. BOOLEAN IsrRequested;
  1887. } NDIS_MINIPORT_INTERRUPT, *PNDIS_MINIPORT_INTERRUPT;
  1888. /* Structures available only to full MAC drivers */
  1889. typedef BOOLEAN
  1890. (NTAPI *PNDIS_INTERRUPT_SERVICE)(
  1891. IN PVOID InterruptContext);
  1892. typedef VOID
  1893. (NTAPI *PNDIS_DEFERRED_PROCESSING)(
  1894. IN PVOID SystemSpecific1,
  1895. IN PVOID InterruptContext,
  1896. IN PVOID SystemSpecific2,
  1897. IN PVOID SystemSpecific3);
  1898. typedef struct _NDIS_WRAPPER_HANDLE NDIS_WRAPPER_HANDLE, *PNDIS_WRAPPER_HANDLE;
  1899. typedef struct _NDIS_PROTOCOL_BLOCK NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
  1900. typedef struct _NDIS_OPEN_BLOCK NDIS_OPEN_BLOCK, *PNDIS_OPEN_BLOCK;
  1901. typedef struct _NDIS_M_DRIVER_BLOCK NDIS_M_DRIVER_BLOCK, *PNDIS_M_DRIVER_BLOCK;
  1902. typedef struct _NDIS_OFFLOAD NDIS_OFFLOAD, *PNDIS_OFFLOAD;
  1903. typedef struct _NDIS_AF_LIST NDIS_AF_LIST, *PNDIS_AF_LIST;
  1904. typedef struct _X_FILTER ETH_FILTER, *PETH_FILTER;
  1905. #if NDIS_SUPPORT_NDIS6
  1906. typedef USHORT NET_FRAME_TYPE, *PNET_FRAME_TYPE;
  1907. #endif
  1908. typedef struct _NDIS_MINIPORT_TIMER {
  1909. KTIMER Timer;
  1910. KDPC Dpc;
  1911. PNDIS_TIMER_FUNCTION MiniportTimerFunction;
  1912. PVOID MiniportTimerContext;
  1913. PNDIS_MINIPORT_BLOCK Miniport;
  1914. struct _NDIS_MINIPORT_TIMER *NextDeferredTimer;
  1915. } NDIS_MINIPORT_TIMER, *PNDIS_MINIPORT_TIMER;
  1916. typedef struct _NDIS_INTERRUPT {
  1917. PKINTERRUPT InterruptObject;
  1918. KSPIN_LOCK DpcCountLock;
  1919. PNDIS_INTERRUPT_SERVICE MacIsr;
  1920. PNDIS_DEFERRED_PROCESSING MacDpc;
  1921. KDPC InterruptDpc;
  1922. PVOID InterruptContext;
  1923. UCHAR DpcCount;
  1924. BOOLEAN Removing;
  1925. KEVENT DpcsCompletedEvent;
  1926. } NDIS_INTERRUPT, *PNDIS_INTERRUPT;
  1927. typedef enum _NDIS_WORK_ITEM_TYPE {
  1928. NdisWorkItemRequest,
  1929. NdisWorkItemSend,
  1930. NdisWorkItemReturnPackets,
  1931. NdisWorkItemResetRequested,
  1932. NdisWorkItemResetInProgress,
  1933. NdisWorkItemHalt,
  1934. NdisWorkItemSendLoopback,
  1935. NdisWorkItemMiniportCallback,
  1936. NdisMaxWorkItems
  1937. } NDIS_WORK_ITEM_TYPE, *PNDIS_WORK_ITEM_TYPE;
  1938. #define NUMBER_OF_WORK_ITEM_TYPES NdisMaxWorkItems
  1939. #define NUMBER_OF_SINGLE_WORK_ITEMS 6
  1940. typedef struct _NDIS_MINIPORT_WORK_ITEM {
  1941. SINGLE_LIST_ENTRY Link;
  1942. NDIS_WORK_ITEM_TYPE WorkItemType;
  1943. PVOID WorkItemContext;
  1944. } NDIS_MINIPORT_WORK_ITEM, *PNDIS_MINIPORT_WORK_ITEM;
  1945. struct _NDIS_WORK_ITEM;
  1946. typedef VOID (*NDIS_PROC)(struct _NDIS_WORK_ITEM *, PVOID);
  1947. typedef struct _NDIS_WORK_ITEM {
  1948. PVOID Context;
  1949. NDIS_PROC Routine;
  1950. UCHAR WrapperReserved[8*sizeof(PVOID)];
  1951. } NDIS_WORK_ITEM, *PNDIS_WORK_ITEM;
  1952. typedef struct _NDIS_BIND_PATHS {
  1953. UINT Number;
  1954. NDIS_STRING Paths[1];
  1955. } NDIS_BIND_PATHS, *PNDIS_BIND_PATHS;
  1956. typedef VOID
  1957. (NTAPI *ETH_RCV_COMPLETE_HANDLER)(
  1958. IN PETH_FILTER Filter);
  1959. typedef VOID
  1960. (NTAPI *ETH_RCV_INDICATE_HANDLER)(
  1961. IN PETH_FILTER Filter,
  1962. IN NDIS_HANDLE MacReceiveContext,
  1963. IN PCHAR Address,
  1964. IN PVOID HeaderBuffer,
  1965. IN UINT HeaderBufferSize,
  1966. IN PVOID LookaheadBuffer,
  1967. IN UINT LookaheadBufferSize,
  1968. IN UINT PacketSize);
  1969. typedef VOID
  1970. (NTAPI *FDDI_RCV_COMPLETE_HANDLER)(
  1971. IN PFDDI_FILTER Filter);
  1972. typedef VOID
  1973. (NTAPI *FDDI_RCV_INDICATE_HANDLER)(
  1974. IN PFDDI_FILTER Filter,
  1975. IN NDIS_HANDLE MacReceiveContext,
  1976. IN PCHAR Address,
  1977. IN UINT AddressLength,
  1978. IN PVOID HeaderBuffer,
  1979. IN UINT HeaderBufferSize,
  1980. IN PVOID LookaheadBuffer,
  1981. IN UINT LookaheadBufferSize,
  1982. IN UINT PacketSize);
  1983. typedef VOID
  1984. (NTAPI *FILTER_PACKET_INDICATION_HANDLER)(
  1985. IN NDIS_HANDLE Miniport,
  1986. IN PPNDIS_PACKET PacketArray,
  1987. IN UINT NumberOfPackets);
  1988. typedef VOID
  1989. (NTAPI *TR_RCV_COMPLETE_HANDLER)(
  1990. IN PTR_FILTER Filter);
  1991. typedef VOID
  1992. (NTAPI *TR_RCV_INDICATE_HANDLER)(
  1993. IN PTR_FILTER Filter,
  1994. IN NDIS_HANDLE MacReceiveContext,
  1995. IN PVOID HeaderBuffer,
  1996. IN UINT HeaderBufferSize,
  1997. IN PVOID LookaheadBuffer,
  1998. IN UINT LookaheadBufferSize,
  1999. IN UINT PacketSize);
  2000. typedef VOID
  2001. (NTAPI *WAN_RCV_COMPLETE_HANDLER)(
  2002. IN NDIS_HANDLE MiniportAdapterHandle,
  2003. IN NDIS_HANDLE NdisLinkContext);
  2004. typedef VOID
  2005. (NTAPI *WAN_RCV_HANDLER)(
  2006. OUT PNDIS_STATUS Status,
  2007. IN NDIS_HANDLE MiniportAdapterHandle,
  2008. IN NDIS_HANDLE NdisLinkContext,
  2009. IN PUCHAR Packet,
  2010. IN ULONG PacketSize);
  2011. typedef VOID
  2012. (FASTCALL *NDIS_M_DEQUEUE_WORK_ITEM)(
  2013. IN PNDIS_MINIPORT_BLOCK Miniport,
  2014. IN NDIS_WORK_ITEM_TYPE WorkItemType,
  2015. OUT PVOID *WorkItemContext);
  2016. typedef NDIS_STATUS
  2017. (FASTCALL *NDIS_M_QUEUE_NEW_WORK_ITEM)(
  2018. IN PNDIS_MINIPORT_BLOCK Miniport,
  2019. IN NDIS_WORK_ITEM_TYPE WorkItemType,
  2020. IN PVOID WorkItemContext);
  2021. typedef NDIS_STATUS
  2022. (FASTCALL *NDIS_M_QUEUE_WORK_ITEM)(
  2023. IN PNDIS_MINIPORT_BLOCK Miniport,
  2024. IN NDIS_WORK_ITEM_TYPE WorkItemType,
  2025. IN PVOID WorkItemContext);
  2026. typedef VOID
  2027. (NTAPI *NDIS_M_REQ_COMPLETE_HANDLER)(
  2028. IN NDIS_HANDLE MiniportAdapterHandle,
  2029. IN NDIS_STATUS Status);
  2030. typedef VOID
  2031. (NTAPI *NDIS_M_RESET_COMPLETE_HANDLER)(
  2032. IN NDIS_HANDLE MiniportAdapterHandle,
  2033. IN NDIS_STATUS Status,
  2034. IN BOOLEAN AddressingReset);
  2035. typedef VOID
  2036. (NTAPI *NDIS_M_SEND_COMPLETE_HANDLER)(
  2037. IN NDIS_HANDLE MiniportAdapterHandle,
  2038. IN PNDIS_PACKET Packet,
  2039. IN NDIS_STATUS Status);
  2040. typedef VOID
  2041. (NTAPI *NDIS_M_SEND_RESOURCES_HANDLER)(
  2042. IN NDIS_HANDLE MiniportAdapterHandle);
  2043. typedef BOOLEAN
  2044. (FASTCALL *NDIS_M_START_SENDS)(
  2045. IN PNDIS_MINIPORT_BLOCK Miniport);
  2046. typedef VOID
  2047. (NTAPI *NDIS_M_STATUS_HANDLER)(
  2048. IN NDIS_HANDLE MiniportHandle,
  2049. IN NDIS_STATUS GeneralStatus,
  2050. IN PVOID StatusBuffer,
  2051. IN UINT StatusBufferSize);
  2052. typedef VOID
  2053. (NTAPI *NDIS_M_STS_COMPLETE_HANDLER)(
  2054. IN NDIS_HANDLE MiniportAdapterHandle);
  2055. typedef VOID
  2056. (NTAPI *NDIS_M_TD_COMPLETE_HANDLER)(
  2057. IN NDIS_HANDLE MiniportAdapterHandle,
  2058. IN PNDIS_PACKET Packet,
  2059. IN NDIS_STATUS Status,
  2060. IN UINT BytesTransferred);
  2061. typedef VOID (NTAPI *NDIS_WM_SEND_COMPLETE_HANDLER)(
  2062. IN NDIS_HANDLE MiniportAdapterHandle,
  2063. IN PVOID Packet,
  2064. IN NDIS_STATUS Status);
  2065. #if ARCNET
  2066. #define ARC_SEND_BUFFERS 8
  2067. #define ARC_HEADER_SIZE 4
  2068. typedef struct _NDIS_ARC_BUF {
  2069. NDIS_HANDLE ArcnetBufferPool;
  2070. PUCHAR ArcnetLookaheadBuffer;
  2071. UINT NumFree;
  2072. ARC_BUFFER_LIST ArcnetBuffers[ARC_SEND_BUFFERS];
  2073. } NDIS_ARC_BUF, *PNDIS_ARC_BUF;
  2074. #endif /* ARCNET */
  2075. typedef struct _NDIS_LOG {
  2076. PNDIS_MINIPORT_BLOCK Miniport;
  2077. KSPIN_LOCK LogLock;
  2078. PIRP Irp;
  2079. UINT TotalSize;
  2080. UINT CurrentSize;
  2081. UINT InPtr;
  2082. UINT OutPtr;
  2083. UCHAR LogBuf[1];
  2084. } NDIS_LOG, *PNDIS_LOG;
  2085. #if ARCNET
  2086. #define FILTERDBS_ARCNET_S \
  2087. PARC_FILTER ArcDB;
  2088. #else /* !ARCNET */
  2089. #define FILTERDBS_ARCNET_S \
  2090. PVOID XXXDB;
  2091. #endif /* !ARCNET */
  2092. #define FILTERDBS_S \
  2093. _ANONYMOUS_UNION union { \
  2094. PETH_FILTER EthDB; \
  2095. PNULL_FILTER NullDB; \
  2096. } DUMMYUNIONNAME; \
  2097. PTR_FILTER TrDB; \
  2098. PFDDI_FILTER FddiDB; \
  2099. FILTERDBS_ARCNET_S
  2100. typedef struct _FILTERDBS {
  2101. FILTERDBS_S
  2102. } FILTERDBS, *PFILTERDBS;
  2103. struct _NDIS_MINIPORT_BLOCK {
  2104. NDIS_OBJECT_HEADER Header;
  2105. PNDIS_MINIPORT_BLOCK NextMiniport;
  2106. PNDIS_M_DRIVER_BLOCK DriverHandle;
  2107. NDIS_HANDLE MiniportAdapterContext;
  2108. UNICODE_STRING MiniportName;
  2109. PNDIS_BIND_PATHS BindPaths;
  2110. NDIS_HANDLE OpenQueue;
  2111. REFERENCE ShortRef;
  2112. NDIS_HANDLE DeviceContext;
  2113. UCHAR Padding1;
  2114. UCHAR LockAcquired;
  2115. UCHAR PmodeOpens;
  2116. UCHAR AssignedProcessor;
  2117. KSPIN_LOCK Lock;
  2118. PNDIS_REQUEST MediaRequest;
  2119. PNDIS_MINIPORT_INTERRUPT Interrupt;
  2120. ULONG Flags;
  2121. ULONG PnPFlags;
  2122. LIST_ENTRY PacketList;
  2123. PNDIS_PACKET FirstPendingPacket;
  2124. PNDIS_PACKET ReturnPacketsQueue;
  2125. ULONG RequestBuffer;
  2126. PVOID SetMCastBuffer;
  2127. PNDIS_MINIPORT_BLOCK PrimaryMiniport;
  2128. PVOID WrapperContext;
  2129. PVOID BusDataContext;
  2130. ULONG PnPCapabilities;
  2131. PCM_RESOURCE_LIST Resources;
  2132. NDIS_TIMER WakeUpDpcTimer;
  2133. UNICODE_STRING BaseName;
  2134. UNICODE_STRING SymbolicLinkName;
  2135. ULONG CheckForHangSeconds;
  2136. USHORT CFHangTicks;
  2137. USHORT CFHangCurrentTick;
  2138. NDIS_STATUS ResetStatus;
  2139. NDIS_HANDLE ResetOpen;
  2140. FILTERDBS_S
  2141. FILTER_PACKET_INDICATION_HANDLER PacketIndicateHandler;
  2142. NDIS_M_SEND_COMPLETE_HANDLER SendCompleteHandler;
  2143. NDIS_M_SEND_RESOURCES_HANDLER SendResourcesHandler;
  2144. NDIS_M_RESET_COMPLETE_HANDLER ResetCompleteHandler;
  2145. NDIS_MEDIUM MediaType;
  2146. ULONG BusNumber;
  2147. NDIS_INTERFACE_TYPE BusType;
  2148. NDIS_INTERFACE_TYPE AdapterType;
  2149. PDEVICE_OBJECT DeviceObject;
  2150. PDEVICE_OBJECT PhysicalDeviceObject;
  2151. PDEVICE_OBJECT NextDeviceObject;
  2152. PMAP_REGISTER_ENTRY MapRegisters;
  2153. PNDIS_AF_LIST CallMgrAfList;
  2154. PVOID MiniportThread;
  2155. PVOID SetInfoBuf;
  2156. USHORT SetInfoBufLen;
  2157. USHORT MaxSendPackets;
  2158. NDIS_STATUS FakeStatus;
  2159. PVOID LockHandler;
  2160. PUNICODE_STRING pAdapterInstanceName;
  2161. PNDIS_MINIPORT_TIMER TimerQueue;
  2162. UINT MacOptions;
  2163. PNDIS_REQUEST PendingRequest;
  2164. UINT MaximumLongAddresses;
  2165. UINT MaximumShortAddresses;
  2166. UINT CurrentLookahead;
  2167. UINT MaximumLookahead;
  2168. W_HANDLE_INTERRUPT_HANDLER HandleInterruptHandler;
  2169. W_DISABLE_INTERRUPT_HANDLER DisableInterruptHandler;
  2170. W_ENABLE_INTERRUPT_HANDLER EnableInterruptHandler;
  2171. W_SEND_PACKETS_HANDLER SendPacketsHandler;
  2172. NDIS_M_START_SENDS DeferredSendHandler;
  2173. ETH_RCV_INDICATE_HANDLER EthRxIndicateHandler;
  2174. TR_RCV_INDICATE_HANDLER TrRxIndicateHandler;
  2175. FDDI_RCV_INDICATE_HANDLER FddiRxIndicateHandler;
  2176. ETH_RCV_COMPLETE_HANDLER EthRxCompleteHandler;
  2177. TR_RCV_COMPLETE_HANDLER TrRxCompleteHandler;
  2178. FDDI_RCV_COMPLETE_HANDLER FddiRxCompleteHandler;
  2179. NDIS_M_STATUS_HANDLER StatusHandler;
  2180. NDIS_M_STS_COMPLETE_HANDLER StatusCompleteHandler;
  2181. NDIS_M_TD_COMPLETE_HANDLER TDCompleteHandler;
  2182. NDIS_M_REQ_COMPLETE_HANDLER QueryCompleteHandler;
  2183. NDIS_M_REQ_COMPLETE_HANDLER SetCompleteHandler;
  2184. NDIS_WM_SEND_COMPLETE_HANDLER WanSendCompleteHandler;
  2185. WAN_RCV_HANDLER WanRcvHandler;
  2186. WAN_RCV_COMPLETE_HANDLER WanRcvCompleteHandler;
  2187. #if defined(NDIS_WRAPPER)
  2188. PNDIS_MINIPORT_BLOCK NextGlobalMiniport;
  2189. SINGLE_LIST_ENTRY WorkQueue[NUMBER_OF_WORK_ITEM_TYPES];
  2190. SINGLE_LIST_ENTRY SingleWorkItems[NUMBER_OF_SINGLE_WORK_ITEMS];
  2191. UCHAR SendFlags;
  2192. UCHAR TrResetRing;
  2193. UCHAR ArcnetAddress;
  2194. UCHAR XState;
  2195. _ANONYMOUS_UNION union {
  2196. #if ARCNET
  2197. PNDIS_ARC_BUF ArcBuf;
  2198. #endif
  2199. PVOID BusInterface;
  2200. } DUMMYUNIONNAME;
  2201. PNDIS_LOG Log;
  2202. ULONG SlotNumber;
  2203. PCM_RESOURCE_LIST AllocatedResources;
  2204. PCM_RESOURCE_LIST AllocatedResourcesTranslated;
  2205. SINGLE_LIST_ENTRY PatternList;
  2206. NDIS_PNP_CAPABILITIES PMCapabilities;
  2207. DEVICE_CAPABILITIES DeviceCaps;
  2208. ULONG WakeUpEnable;
  2209. DEVICE_POWER_STATE CurrentDevicePowerState;
  2210. PIRP pIrpWaitWake;
  2211. SYSTEM_POWER_STATE WaitWakeSystemState;
  2212. LARGE_INTEGER VcIndex;
  2213. KSPIN_LOCK VcCountLock;
  2214. LIST_ENTRY WmiEnabledVcs;
  2215. PNDIS_GUID pNdisGuidMap;
  2216. PNDIS_GUID pCustomGuidMap;
  2217. USHORT VcCount;
  2218. USHORT cNdisGuidMap;
  2219. USHORT cCustomGuidMap;
  2220. USHORT CurrentMapRegister;
  2221. PKEVENT AllocationEvent;
  2222. USHORT BaseMapRegistersNeeded;
  2223. USHORT SGMapRegistersNeeded;
  2224. ULONG MaximumPhysicalMapping;
  2225. NDIS_TIMER MediaDisconnectTimer;
  2226. USHORT MediaDisconnectTimeOut;
  2227. USHORT InstanceNumber;
  2228. NDIS_EVENT OpenReadyEvent;
  2229. NDIS_PNP_DEVICE_STATE PnPDeviceState;
  2230. NDIS_PNP_DEVICE_STATE OldPnPDeviceState;
  2231. PGET_SET_DEVICE_DATA SetBusData;
  2232. PGET_SET_DEVICE_DATA GetBusData;
  2233. KDPC DeferredDpc;
  2234. #if 0
  2235. /* FIXME: */
  2236. NDIS_STATS NdisStats;
  2237. #else
  2238. ULONG NdisStats;
  2239. #endif
  2240. PNDIS_PACKET IndicatedPacket[MAXIMUM_PROCESSORS];
  2241. PKEVENT RemoveReadyEvent;
  2242. PKEVENT AllOpensClosedEvent;
  2243. PKEVENT AllRequestsCompletedEvent;
  2244. ULONG InitTimeMs;
  2245. NDIS_MINIPORT_WORK_ITEM WorkItemBuffer[NUMBER_OF_SINGLE_WORK_ITEMS];
  2246. PDMA_ADAPTER SystemAdapterObject;
  2247. ULONG DriverVerifyFlags;
  2248. POID_LIST OidList;
  2249. USHORT InternalResetCount;
  2250. USHORT MiniportResetCount;
  2251. USHORT MediaSenseConnectCount;
  2252. USHORT MediaSenseDisconnectCount;
  2253. PNDIS_PACKET *xPackets;
  2254. ULONG UserModeOpenReferences;
  2255. _ANONYMOUS_UNION union {
  2256. PVOID SavedSendHandler;
  2257. PVOID SavedWanSendHandler;
  2258. } DUMMYUNIONNAME2;
  2259. PVOID SavedSendPacketsHandler;
  2260. PVOID SavedCancelSendPacketsHandler;
  2261. W_SEND_PACKETS_HANDLER WSendPacketsHandler;
  2262. ULONG MiniportAttributes;
  2263. PDMA_ADAPTER SavedSystemAdapterObject;
  2264. USHORT NumOpens;
  2265. USHORT CFHangXTicks;
  2266. ULONG RequestCount;
  2267. ULONG IndicatedPacketsCount;
  2268. ULONG PhysicalMediumType;
  2269. PNDIS_REQUEST LastRequest;
  2270. LONG DmaAdapterRefCount;
  2271. PVOID FakeMac;
  2272. ULONG LockDbg;
  2273. ULONG LockDbgX;
  2274. PVOID LockThread;
  2275. ULONG InfoFlags;
  2276. KSPIN_LOCK TimerQueueLock;
  2277. PKEVENT ResetCompletedEvent;
  2278. PKEVENT QueuedBindingCompletedEvent;
  2279. PKEVENT DmaResourcesReleasedEvent;
  2280. FILTER_PACKET_INDICATION_HANDLER SavedPacketIndicateHandler;
  2281. ULONG RegisteredInterrupts;
  2282. PNPAGED_LOOKASIDE_LIST SGListLookasideList;
  2283. ULONG ScatterGatherListSize;
  2284. #endif /* _NDIS_ */
  2285. };
  2286. #if NDIS_LEGACY_DRIVER
  2287. typedef NDIS_STATUS
  2288. (NTAPI *WAN_SEND_HANDLER)(
  2289. IN NDIS_HANDLE MacBindingHandle,
  2290. IN NDIS_HANDLE LinkHandle,
  2291. IN PVOID Packet);
  2292. typedef VOID
  2293. (NTAPI *SEND_PACKETS_HANDLER)(
  2294. IN NDIS_HANDLE MiniportAdapterContext,
  2295. IN PPNDIS_PACKET PacketArray,
  2296. IN UINT NumberOfPackets);
  2297. typedef NDIS_STATUS
  2298. (NTAPI *SEND_HANDLER)(
  2299. IN NDIS_HANDLE NdisBindingHandle,
  2300. IN PNDIS_PACKET Packet);
  2301. typedef NDIS_STATUS
  2302. (NTAPI *TRANSFER_DATA_HANDLER)(
  2303. IN NDIS_HANDLE NdisBindingHandle,
  2304. IN NDIS_HANDLE MacReceiveContext,
  2305. IN UINT ByteOffset,
  2306. IN UINT BytesToTransfer,
  2307. OUT PNDIS_PACKET Packet,
  2308. OUT PUINT BytesTransferred);
  2309. typedef NDIS_STATUS
  2310. (NTAPI *RESET_HANDLER)(
  2311. IN NDIS_HANDLE NdisBindingHandle);
  2312. typedef NDIS_STATUS
  2313. (NTAPI *REQUEST_HANDLER)(
  2314. IN NDIS_HANDLE NdisBindingHandle,
  2315. IN PNDIS_REQUEST NdisRequest);
  2316. #endif /* NDIS_LEGACY_DRIVER */
  2317. #if defined(NDIS_WRAPPER)
  2318. #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S \
  2319. ULONG Flags; \
  2320. ULONG References; \
  2321. KSPIN_LOCK SpinLock; \
  2322. NDIS_HANDLE FilterHandle; \
  2323. ULONG ProtocolOptions; \
  2324. USHORT CurrentLookahead; \
  2325. USHORT ConnectDampTicks; \
  2326. USHORT DisconnectDampTicks; \
  2327. W_SEND_HANDLER WSendHandler; \
  2328. W_TRANSFER_DATA_HANDLER WTransferDataHandler; \
  2329. W_SEND_PACKETS_HANDLER WSendPacketsHandler; \
  2330. W_CANCEL_SEND_PACKETS_HANDLER CancelSendPacketsHandler; \
  2331. ULONG WakeUpEnable; \
  2332. PKEVENT CloseCompleteEvent; \
  2333. QUEUED_CLOSE QC; \
  2334. ULONG AfReferences; \
  2335. PNDIS_OPEN_BLOCK NextGlobalOpen;
  2336. #else
  2337. #define NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
  2338. #endif
  2339. #define NDIS_COMMON_OPEN_BLOCK_S \
  2340. PVOID MacHandle; \
  2341. NDIS_HANDLE BindingHandle; \
  2342. PNDIS_MINIPORT_BLOCK MiniportHandle; \
  2343. PNDIS_PROTOCOL_BLOCK ProtocolHandle; \
  2344. NDIS_HANDLE ProtocolBindingContext; \
  2345. PNDIS_OPEN_BLOCK MiniportNextOpen; \
  2346. PNDIS_OPEN_BLOCK ProtocolNextOpen; \
  2347. NDIS_HANDLE MiniportAdapterContext; \
  2348. BOOLEAN Reserved1; \
  2349. BOOLEAN Reserved2; \
  2350. BOOLEAN Reserved3; \
  2351. BOOLEAN Reserved4; \
  2352. PNDIS_STRING BindDeviceName; \
  2353. KSPIN_LOCK Reserved5; \
  2354. PNDIS_STRING RootDeviceName; \
  2355. _ANONYMOUS_UNION union { \
  2356. SEND_HANDLER SendHandler; \
  2357. WAN_SEND_HANDLER WanSendHandler; \
  2358. } DUMMYUNIONNAME; \
  2359. TRANSFER_DATA_HANDLER TransferDataHandler; \
  2360. SEND_COMPLETE_HANDLER SendCompleteHandler; \
  2361. TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler; \
  2362. RECEIVE_HANDLER ReceiveHandler; \
  2363. RECEIVE_COMPLETE_HANDLER ReceiveCompleteHandler; \
  2364. WAN_RECEIVE_HANDLER WanReceiveHandler; \
  2365. REQUEST_COMPLETE_HANDLER RequestCompleteHandler; \
  2366. RECEIVE_PACKET_HANDLER ReceivePacketHandler; \
  2367. SEND_PACKETS_HANDLER SendPacketsHandler; \
  2368. RESET_HANDLER ResetHandler; \
  2369. REQUEST_HANDLER RequestHandler; \
  2370. RESET_COMPLETE_HANDLER ResetCompleteHandler; \
  2371. STATUS_HANDLER StatusHandler; \
  2372. STATUS_COMPLETE_HANDLER StatusCompleteHandler; \
  2373. NDIS_COMMON_OPEN_BLOCK_WRAPPER_S
  2374. typedef struct _NDIS_COMMON_OPEN_BLOCK {
  2375. NDIS_COMMON_OPEN_BLOCK_S
  2376. } NDIS_COMMON_OPEN_BLOCK;
  2377. struct _NDIS_OPEN_BLOCK
  2378. {
  2379. #ifdef __cplusplus
  2380. NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
  2381. #else
  2382. NDIS_COMMON_OPEN_BLOCK_S
  2383. #endif
  2384. };
  2385. #include <xfilter.h>
  2386. #define NDIS_M_MAX_LOOKAHEAD 526
  2387. NDISAPI
  2388. VOID
  2389. NTAPI
  2390. NdisInitializeTimer(
  2391. PNDIS_TIMER Timer,
  2392. PNDIS_TIMER_FUNCTION TimerFunction,
  2393. PVOID FunctionContext);
  2394. NDISAPI
  2395. VOID
  2396. NTAPI
  2397. NdisCancelTimer(
  2398. PNDIS_TIMER Timer,
  2399. PBOOLEAN TimerCancelled);
  2400. NDISAPI
  2401. VOID
  2402. NTAPI
  2403. NdisSetTimer(
  2404. PNDIS_TIMER Timer,
  2405. UINT MillisecondsToDelay);
  2406. NDISAPI
  2407. VOID
  2408. NTAPI
  2409. NdisSetPeriodicTimer(
  2410. PNDIS_TIMER NdisTimer,
  2411. UINT MillisecondsPeriod);
  2412. NDISAPI
  2413. VOID
  2414. NTAPI
  2415. NdisSetTimerEx(
  2416. PNDIS_TIMER NdisTimer,
  2417. UINT MillisecondsToDelay,
  2418. PVOID FunctionContext);
  2419. NDISAPI
  2420. PVOID
  2421. NTAPI
  2422. NdisGetRoutineAddress(
  2423. PNDIS_STRING NdisRoutineName);
  2424. NDISAPI
  2425. UINT
  2426. NTAPI
  2427. NdisGetVersion(VOID);
  2428. #if NDIS_LEGACY_DRIVER
  2429. NDISAPI
  2430. VOID
  2431. NTAPI
  2432. NdisAllocateBuffer(
  2433. OUT PNDIS_STATUS Status,
  2434. OUT PNDIS_BUFFER *Buffer,
  2435. IN NDIS_HANDLE PoolHandle OPTIONAL,
  2436. IN PVOID VirtualAddress,
  2437. IN UINT Length);
  2438. NDISAPI
  2439. VOID
  2440. NTAPI
  2441. NdisAllocateBufferPool(
  2442. OUT PNDIS_STATUS Status,
  2443. OUT PNDIS_HANDLE PoolHandle,
  2444. IN UINT NumberOfDescriptors);
  2445. NDISAPI
  2446. VOID
  2447. NTAPI
  2448. NdisFreeBufferPool(
  2449. IN NDIS_HANDLE PoolHandle);
  2450. /*
  2451. NDISAPI
  2452. VOID
  2453. NTAPI
  2454. NdisFreeBuffer(
  2455. IN PNDIS_BUFFER Buffer);
  2456. */
  2457. #define NdisFreeBuffer IoFreeMdl
  2458. NDISAPI
  2459. VOID
  2460. NTAPI
  2461. NdisAllocatePacketPool(
  2462. OUT PNDIS_STATUS Status,
  2463. OUT PNDIS_HANDLE PoolHandle,
  2464. IN UINT NumberOfDescriptors,
  2465. IN UINT ProtocolReservedLength);
  2466. NDISAPI
  2467. VOID
  2468. NTAPI
  2469. NdisAllocatePacketPoolEx(
  2470. OUT PNDIS_STATUS Status,
  2471. OUT PNDIS_HANDLE PoolHandle,
  2472. IN UINT NumberOfDescriptors,
  2473. IN UINT NumberOfOverflowDescriptors,
  2474. IN UINT ProtocolReservedLength);
  2475. NDISAPI
  2476. VOID
  2477. NTAPI
  2478. NdisSetPacketPoolProtocolId(
  2479. IN NDIS_HANDLE PacketPoolHandle,
  2480. IN UINT ProtocolId);
  2481. NDISAPI
  2482. UINT
  2483. NTAPI
  2484. NdisPacketPoolUsage(
  2485. IN NDIS_HANDLE PoolHandle);
  2486. NDISAPI
  2487. UINT
  2488. NTAPI
  2489. NdisPacketSize(
  2490. IN UINT ProtocolReservedSize);
  2491. NDISAPI
  2492. NDIS_HANDLE
  2493. NTAPI
  2494. NdisGetPoolFromPacket(
  2495. IN PNDIS_PACKET Packet);
  2496. NDISAPI
  2497. PNDIS_PACKET_STACK
  2498. NTAPI
  2499. NdisIMGetCurrentPacketStack(
  2500. IN PNDIS_PACKET Packet,
  2501. OUT BOOLEAN * StacksRemaining);
  2502. NDISAPI
  2503. VOID
  2504. NTAPI
  2505. NdisFreePacketPool(
  2506. IN NDIS_HANDLE PoolHandle);
  2507. NDISAPI
  2508. VOID
  2509. NTAPI
  2510. NdisFreePacket(
  2511. IN PNDIS_PACKET Packet);
  2512. NDISAPI
  2513. VOID
  2514. NTAPI
  2515. NdisDprFreePacket(
  2516. IN PNDIS_PACKET Packet);
  2517. NDISAPI
  2518. VOID
  2519. NTAPI
  2520. NdisDprFreePacketNonInterlocked(
  2521. IN PNDIS_PACKET Packet);
  2522. NDISAPI
  2523. VOID
  2524. NTAPI
  2525. NdisAllocatePacket(
  2526. OUT PNDIS_STATUS Status,
  2527. OUT PNDIS_PACKET *Packet,
  2528. IN NDIS_HANDLE PoolHandle);
  2529. NDISAPI
  2530. VOID
  2531. NTAPI
  2532. NdisDprAllocatePacket(
  2533. OUT PNDIS_STATUS Status,
  2534. OUT PNDIS_PACKET *Packet,
  2535. IN NDIS_HANDLE PoolHandle);
  2536. NDISAPI
  2537. VOID
  2538. NTAPI
  2539. NdisDprAllocatePacketNonInterlocked(
  2540. OUT PNDIS_STATUS Status,
  2541. OUT PNDIS_PACKET *Packet,
  2542. IN NDIS_HANDLE PoolHandle);
  2543. /*
  2544. * VOID
  2545. * NdisReinitializePacket(
  2546. * IN OUT PNDIS_PACKET Packet);
  2547. */
  2548. #define NdisReinitializePacket(Packet) { \
  2549. (Packet)->Private.Head = (PNDIS_BUFFER)NULL; \
  2550. (Packet)->Private.ValidCounts = FALSE; \
  2551. }
  2552. /*
  2553. NDISAPI
  2554. VOID
  2555. NTAPI
  2556. NdisQueryBuffer(
  2557. IN PNDIS_BUFFER Buffer,
  2558. OUT PVOID *VirtualAddress OPTIONAL,
  2559. OUT PUINT Length);
  2560. */
  2561. #define NdisQueryBuffer(_Buffer, _VirtualAddress, _Length) { \
  2562. if (ARGUMENT_PRESENT(_VirtualAddress)) { \
  2563. *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdl(_Buffer); \
  2564. } \
  2565. *(_Length) = MmGetMdlByteCount(_Buffer); \
  2566. }
  2567. NDISAPI
  2568. VOID
  2569. NTAPI
  2570. NdisGetFirstBufferFromPacket(
  2571. IN PNDIS_PACKET _Packet,
  2572. OUT PNDIS_BUFFER *_FirstBuffer,
  2573. OUT PVOID *_FirstBufferVA,
  2574. OUT PUINT _FirstBufferLength,
  2575. OUT PUINT _TotalBufferLength);
  2576. /*
  2577. * VOID
  2578. * NdisGetFirstBufferFromPacketSafe(
  2579. * IN PNDIS_PACKET _Packet,
  2580. * OUT PNDIS_BUFFER * _FirstBuffer,
  2581. * OUT PVOID * _FirstBufferVA,
  2582. * OUT PUINT _FirstBufferLength,
  2583. * OUT PUINT _TotalBufferLength),
  2584. * IN MM_PAGE_PRIORITY _Priority)
  2585. */
  2586. #define NdisGetFirstBufferFromPacketSafe(_Packet, \
  2587. _FirstBuffer, \
  2588. _FirstBufferVA, \
  2589. _FirstBufferLength, \
  2590. _TotalBufferLength, \
  2591. _Priority) \
  2592. { \
  2593. PNDIS_BUFFER _Buffer; \
  2594. \
  2595. _Buffer = (_Packet)->Private.Head; \
  2596. *(_FirstBuffer) = _Buffer; \
  2597. if (_Buffer != NULL) { \
  2598. *(_FirstBufferVA) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
  2599. *(_FirstBufferLength) = MmGetMdlByteCount(_Buffer); \
  2600. _Buffer = _Buffer->Next; \
  2601. *(_TotalBufferLength) = *(_FirstBufferLength); \
  2602. while (_Buffer != NULL) { \
  2603. *(_TotalBufferLength) += MmGetMdlByteCount(_Buffer); \
  2604. _Buffer = _Buffer->Next; \
  2605. } \
  2606. } \
  2607. else { \
  2608. *(_FirstBufferVA) = 0; \
  2609. *(_FirstBufferLength) = 0; \
  2610. *(_TotalBufferLength) = 0; \
  2611. } \
  2612. }
  2613. /*
  2614. * VOID
  2615. * NdisRecalculatePacketCounts(
  2616. * IN OUT PNDIS_PACKET Packet);
  2617. */
  2618. #define NdisRecalculatePacketCounts(Packet) { \
  2619. PNDIS_BUFFER _Buffer = (Packet)->Private.Head; \
  2620. if (_Buffer != NULL) { \
  2621. while (_Buffer->Next != NULL) { \
  2622. _Buffer = _Buffer->Next; \
  2623. } \
  2624. (Packet)->Private.Tail = _Buffer; \
  2625. } \
  2626. (Packet)->Private.ValidCounts = FALSE; \
  2627. }
  2628. /*
  2629. * VOID
  2630. * NdisChainBufferAtFront(
  2631. * IN OUT PNDIS_PACKET Packet,
  2632. * IN OUT PNDIS_BUFFER Buffer)
  2633. */
  2634. #define NdisChainBufferAtFront(Packet, \
  2635. Buffer) \
  2636. { \
  2637. PNDIS_BUFFER _NdisBuffer = (Buffer); \
  2638. \
  2639. while (_NdisBuffer->Next != NULL) \
  2640. _NdisBuffer = _NdisBuffer->Next; \
  2641. \
  2642. if ((Packet)->Private.Head == NULL) \
  2643. (Packet)->Private.Tail = _NdisBuffer; \
  2644. \
  2645. _NdisBuffer->Next = (Packet)->Private.Head; \
  2646. (Packet)->Private.Head = (Buffer); \
  2647. (Packet)->Private.ValidCounts = FALSE; \
  2648. }
  2649. /*
  2650. * VOID
  2651. * NdisChainBufferAtBack(
  2652. * IN OUT PNDIS_PACKET Packet,
  2653. * IN OUT PNDIS_BUFFER Buffer)
  2654. */
  2655. #define NdisChainBufferAtBack(Packet, \
  2656. Buffer) \
  2657. { \
  2658. PNDIS_BUFFER _NdisBuffer = (Buffer); \
  2659. \
  2660. while (_NdisBuffer->Next != NULL) \
  2661. _NdisBuffer = _NdisBuffer->Next; \
  2662. \
  2663. _NdisBuffer->Next = NULL; \
  2664. \
  2665. if ((Packet)->Private.Head != NULL) \
  2666. (Packet)->Private.Tail->Next = (Buffer); \
  2667. else \
  2668. (Packet)->Private.Head = (Buffer); \
  2669. \
  2670. (Packet)->Private.Tail = _NdisBuffer; \
  2671. (Packet)->Private.ValidCounts = FALSE; \
  2672. }
  2673. NDISAPI
  2674. VOID
  2675. NTAPI
  2676. NdisUnchainBufferAtFront(
  2677. IN OUT PNDIS_PACKET Packet,
  2678. OUT PNDIS_BUFFER *Buffer);
  2679. NDISAPI
  2680. VOID
  2681. NTAPI
  2682. NdisUnchainBufferAtBack(
  2683. IN OUT PNDIS_PACKET Packet,
  2684. OUT PNDIS_BUFFER *Buffer);
  2685. NDISAPI
  2686. VOID
  2687. NTAPI
  2688. NdisCopyFromPacketToPacket(
  2689. IN PNDIS_PACKET Destination,
  2690. IN UINT DestinationOffset,
  2691. IN UINT BytesToCopy,
  2692. IN PNDIS_PACKET Source,
  2693. IN UINT SourceOffset,
  2694. OUT PUINT BytesCopied);
  2695. NDISAPI
  2696. VOID
  2697. NTAPI
  2698. NdisCopyFromPacketToPacketSafe(
  2699. IN PNDIS_PACKET Destination,
  2700. IN UINT DestinationOffset,
  2701. IN UINT BytesToCopy,
  2702. IN PNDIS_PACKET Source,
  2703. IN UINT SourceOffset,
  2704. OUT PUINT BytesCopied,
  2705. IN MM_PAGE_PRIORITY Priority);
  2706. NDISAPI
  2707. NDIS_STATUS
  2708. NTAPI
  2709. NdisAllocateMemory(
  2710. OUT PVOID *VirtualAddress,
  2711. IN UINT Length,
  2712. IN UINT MemoryFlags,
  2713. IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
  2714. #define NdisInitializeWorkItem(_WI_, _R_, _C_) { \
  2715. (_WI_)->Context = _C_; \
  2716. (_WI_)->Routine = _R_; \
  2717. }
  2718. NDISAPI
  2719. NDIS_STATUS
  2720. NTAPI
  2721. NdisScheduleWorkItem(
  2722. IN PNDIS_WORK_ITEM WorkItem);
  2723. NDISAPI
  2724. VOID
  2725. NTAPI
  2726. NdisSetPacketStatus(
  2727. IN PNDIS_PACKET Packet,
  2728. IN NDIS_STATUS Status,
  2729. IN NDIS_HANDLE Handle,
  2730. IN ULONG Code);
  2731. #endif /* NDIS_LEGACY_DRIVER */
  2732. NDISAPI
  2733. VOID
  2734. NTAPI
  2735. NdisOpenFile(
  2736. OUT PNDIS_STATUS Status,
  2737. OUT PNDIS_HANDLE FileHandle,
  2738. OUT PUINT FileLength,
  2739. IN PNDIS_STRING FileName,
  2740. IN NDIS_PHYSICAL_ADDRESS HighestAcceptableAddress);
  2741. NDISAPI
  2742. VOID
  2743. NTAPI
  2744. NdisCloseFile(
  2745. IN NDIS_HANDLE FileHandle);
  2746. NDISAPI
  2747. VOID
  2748. NTAPI
  2749. NdisMapFile(
  2750. OUT PNDIS_STATUS Status,
  2751. OUT PVOID *MappedBuffer,
  2752. IN NDIS_HANDLE FileHandle);
  2753. NDISAPI
  2754. VOID
  2755. NTAPI
  2756. NdisUnmapFile(
  2757. IN NDIS_HANDLE FileHandle);
  2758. NDISAPI
  2759. ULONG
  2760. NTAPI
  2761. NdisGetSharedDataAlignment(VOID);
  2762. #define NdisFlushBuffer(Buffer,WriteToDevice) \
  2763. KeFlushIoBuffers((Buffer),!(WriteToDevice), TRUE)
  2764. NDISAPI
  2765. VOID
  2766. NTAPI
  2767. NdisCopyBuffer(
  2768. OUT PNDIS_STATUS Status,
  2769. OUT PNDIS_BUFFER *Buffer,
  2770. IN NDIS_HANDLE PoolHandle,
  2771. IN PVOID MemoryDescriptor,
  2772. IN UINT Offset,
  2773. IN UINT Length);
  2774. /*
  2775. * VOID
  2776. * NdisCopyLookaheadData(
  2777. * IN PVOID Destination,
  2778. * IN PVOID Source,
  2779. * IN ULONG Length,
  2780. * IN ULONG ReceiveFlags);
  2781. */
  2782. #if defined(_M_IX86) || defined(_M_AMD64)
  2783. #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
  2784. RtlCopyMemory(Destination, Source, Length)
  2785. #else
  2786. #define NdisCopyLookaheadData(Destination, Source, Length, MacOptions) \
  2787. { \
  2788. if ((MacOptions) & NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA) \
  2789. { \
  2790. RtlCopyMemory(_Destination, _Source, _Length); \
  2791. } \
  2792. else \
  2793. { \
  2794. PUCHAR _Src = (PUCHAR)(Source); \
  2795. PUCHAR _Dest = (PUCHAR)(Destination); \
  2796. PUCHAR _End = _Dest + (Length); \
  2797. while (_Dest < _End) \
  2798. *_Dest++ = *_Src++; \
  2799. } \
  2800. }
  2801. #endif
  2802. /*
  2803. NDISAPI
  2804. VOID
  2805. NTAPI
  2806. NdisAdjustBufferLength(
  2807. IN PNDIS_BUFFER Buffer,
  2808. IN UINT Length);
  2809. */
  2810. #define NdisAdjustBufferLength(Buffer, Length) \
  2811. (((Buffer)->ByteCount) = (Length))
  2812. #if NDIS_SUPPORT_NDIS6
  2813. #define NdisAdjustMdlLength(_Mdl, _Length) \
  2814. (((_Mdl)->ByteCount) = (_Length))
  2815. #endif
  2816. /*
  2817. NDISAPI
  2818. ULONG
  2819. NTAPI
  2820. NdisBufferLength(
  2821. IN PNDIS_BUFFER Buffer);
  2822. */
  2823. #define NdisBufferLength MmGetMdlByteCount
  2824. /*
  2825. NDISAPI
  2826. PVOID
  2827. NTAPI
  2828. NdisBufferVirtualAddress(
  2829. IN PNDIS_BUFFER Buffer);
  2830. */
  2831. #define NdisBufferVirtualAddress MmGetSystemAddressForMdl
  2832. #define NdisBufferVirtualAddressSafe MmGetSystemAddressForMdlSafe
  2833. NDISAPI
  2834. ULONG
  2835. NTAPI
  2836. NDIS_BUFFER_TO_SPAN_PAGES(
  2837. IN PNDIS_BUFFER Buffer);
  2838. /*
  2839. NDISAPI
  2840. VOID
  2841. NTAPI
  2842. NdisGetBufferPhysicalArraySize(
  2843. IN PNDIS_BUFFER Buffer,
  2844. OUT PUINT ArraySize);
  2845. */
  2846. #define NdisGetBufferPhysicalArraySize(Buffer, ArraySize) \
  2847. (*(ArraySize) = NDIS_BUFFER_TO_SPAN_PAGES(Buffer))
  2848. /*
  2849. NDISAPI
  2850. VOID
  2851. NTAPI
  2852. NdisQueryBufferOffset(
  2853. IN PNDIS_BUFFER Buffer,
  2854. OUT PUINT Offset,
  2855. OUT PUINT Length);
  2856. */
  2857. #define NdisQueryBufferOffset(_Buffer, _Offset, _Length) { \
  2858. *(_Offset) = MmGetMdlByteOffset(_Buffer); \
  2859. *(_Length) = MmGetMdlByteCount(_Buffer); \
  2860. }
  2861. /*
  2862. * PVOID
  2863. * NDIS_BUFFER_LINKAGE(
  2864. * IN PNDIS_BUFFER Buffer);
  2865. */
  2866. #define NDIS_BUFFER_LINKAGE(Buffer) (Buffer)->Next
  2867. /*
  2868. * VOID
  2869. * NdisGetNextBuffer(
  2870. * IN PNDIS_BUFFER CurrentBuffer,
  2871. * OUT PNDIS_BUFFER * NextBuffer)
  2872. */
  2873. #define NdisGetNextBuffer(CurrentBuffer, \
  2874. NextBuffer) \
  2875. { \
  2876. *(NextBuffer) = (CurrentBuffer)->Next; \
  2877. }
  2878. #if NDIS_LEGACY_DRIVER
  2879. #define NDIS_PACKET_FIRST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Head)
  2880. #define NDIS_PACKET_LAST_NDIS_BUFFER(_Packet) ((_Packet)->Private.Tail)
  2881. #define NDIS_PACKET_VALID_COUNTS(_Packet) ((_Packet)->Private.ValidCounts)
  2882. /*
  2883. * UINT
  2884. * NdisGetPacketFlags(
  2885. * IN PNDIS_PACKET Packet);
  2886. */
  2887. #define NdisGetPacketFlags(Packet) (Packet)->Private.Flags
  2888. /*
  2889. * ULONG
  2890. * NDIS_GET_PACKET_PROTOCOL_TYPE(
  2891. * IN PNDIS_PACKET Packet);
  2892. */
  2893. #define NDIS_GET_PACKET_PROTOCOL_TYPE(_Packet) \
  2894. ((_Packet)->Private.Flags & NDIS_PROTOCOL_ID_MASK)
  2895. /*
  2896. * PNDIS_PACKET_OOB_DATA
  2897. * NDIS_OOB_DATA_FROM_PACKET(
  2898. * IN PNDIS_PACKET Packet);
  2899. */
  2900. #define NDIS_OOB_DATA_FROM_PACKET(_Packet) \
  2901. (PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2902. (_Packet)->Private.NdisPacketOobOffset)
  2903. /*
  2904. * ULONG
  2905. * NDIS_GET_PACKET_HEADER_SIZE(
  2906. * IN PNDIS_PACKET Packet);
  2907. */
  2908. #define NDIS_GET_PACKET_HEADER_SIZE(_Packet) \
  2909. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2910. (_Packet)->Private.NdisPacketOobOffset))->HeaderSize
  2911. /*
  2912. * NDIS_STATUS
  2913. * NDIS_GET_PACKET_STATUS(
  2914. * IN PNDIS_PACKET Packet);
  2915. */
  2916. #define NDIS_GET_PACKET_STATUS(_Packet) \
  2917. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2918. (_Packet)->Private.NdisPacketOobOffset))->Status
  2919. /*
  2920. * ULONGLONG
  2921. * NDIS_GET_PACKET_TIME_TO_SEND(
  2922. * IN PNDIS_PACKET Packet);
  2923. */
  2924. #define NDIS_GET_PACKET_TIME_TO_SEND(_Packet) \
  2925. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2926. (_Packet)->Private.NdisPacketOobOffset))->TimeToSend
  2927. /*
  2928. * ULONGLONG
  2929. * NDIS_GET_PACKET_TIME_SENT(
  2930. * IN PNDIS_PACKET Packet);
  2931. */
  2932. #define NDIS_GET_PACKET_TIME_SENT(_Packet) \
  2933. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2934. (_Packet)->Private.NdisPacketOobOffset))->TimeSent
  2935. /*
  2936. * ULONGLONG
  2937. * NDIS_GET_PACKET_TIME_RECEIVED(
  2938. * IN PNDIS_PACKET Packet);
  2939. */
  2940. #define NDIS_GET_PACKET_TIME_RECEIVED(_Packet) \
  2941. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2942. (_Packet)->Private.NdisPacketOobOffset))->TimeReceived
  2943. /*
  2944. * VOID
  2945. * NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(
  2946. * IN PNDIS_PACKET Packet,
  2947. * IN PPVOID pMediaSpecificInfo,
  2948. * IN PUINT pSizeMediaSpecificInfo);
  2949. */
  2950. #define NDIS_GET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
  2951. _pMediaSpecificInfo, \
  2952. _pSizeMediaSpecificInfo) \
  2953. { \
  2954. if (!((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) || \
  2955. !((_Packet)->Private.NdisPacketFlags & fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO)) \
  2956. { \
  2957. *(_pMediaSpecificInfo) = NULL; \
  2958. *(_pSizeMediaSpecificInfo) = 0; \
  2959. } \
  2960. else \
  2961. { \
  2962. *(_pMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2963. (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation; \
  2964. *(_pSizeMediaSpecificInfo) = ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2965. (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo; \
  2966. } \
  2967. }
  2968. /*
  2969. * VOID
  2970. * NDIS_SET_PACKET_HEADER_SIZE(
  2971. * IN PNDIS_PACKET Packet,
  2972. * IN UINT HdrSize);
  2973. */
  2974. #define NDIS_SET_PACKET_HEADER_SIZE(_Packet, _HdrSize) \
  2975. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2976. (_Packet)->Private.NdisPacketOobOffset))->HeaderSize = (_HdrSize)
  2977. /*
  2978. * VOID
  2979. * NDIS_SET_PACKET_STATUS(
  2980. * IN PNDIS_PACKET Packet,
  2981. * IN NDIS_STATUS Status);
  2982. */
  2983. #define NDIS_SET_PACKET_STATUS(_Packet, _Status) \
  2984. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2985. (_Packet)->Private.NdisPacketOobOffset))->Status = (_Status)
  2986. /*
  2987. * VOID
  2988. * NDIS_SET_PACKET_TIME_TO_SEND(
  2989. * IN PNDIS_PACKET Packet,
  2990. * IN ULONGLONG TimeToSend);
  2991. */
  2992. #define NDIS_SET_PACKET_TIME_TO_SEND(_Packet, _TimeToSend) \
  2993. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  2994. (_Packet)->Private.NdisPacketOobOffset))->TimeToSend = (_TimeToSend)
  2995. /*
  2996. * VOID
  2997. * NDIS_SET_PACKET_TIME_SENT(
  2998. * IN PNDIS_PACKET Packet,
  2999. * IN ULONGLONG TimeSent);
  3000. */
  3001. #define NDIS_SET_PACKET_TIME_SENT(_Packet, _TimeSent) \
  3002. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  3003. (_Packet)->Private.NdisPacketOobOffset))->TimeSent = (_TimeSent)
  3004. /*
  3005. * VOID
  3006. * NDIS_SET_PACKET_TIME_RECEIVED(
  3007. * IN PNDIS_PACKET Packet,
  3008. * IN ULONGLONG TimeReceived);
  3009. */
  3010. #define NDIS_SET_PACKET_TIME_RECEIVED(_Packet, _TimeReceived) \
  3011. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  3012. (_Packet)->Private.NdisPacketOobOffset))->TimeReceived = (_TimeReceived)
  3013. /*
  3014. * VOID
  3015. * NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(
  3016. * IN PNDIS_PACKET Packet,
  3017. * IN PVOID MediaSpecificInfo,
  3018. * IN UINT SizeMediaSpecificInfo);
  3019. */
  3020. #define NDIS_SET_PACKET_MEDIA_SPECIFIC_INFO(_Packet, \
  3021. _MediaSpecificInfo, \
  3022. _SizeMediaSpecificInfo) \
  3023. { \
  3024. if ((_Packet)->Private.NdisPacketFlags & fPACKET_ALLOCATED_BY_NDIS) \
  3025. { \
  3026. (_Packet)->Private.NdisPacketFlags |= fPACKET_CONTAINS_MEDIA_SPECIFIC_INFO; \
  3027. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  3028. (_Packet)->Private.NdisPacketOobOffset))->MediaSpecificInformation = \
  3029. (_MediaSpecificInfo); \
  3030. ((PNDIS_PACKET_OOB_DATA)((PUCHAR)(_Packet) + \
  3031. (_Packet)->Private.NdisPacketOobOffset))->SizeMediaSpecificInfo = \
  3032. (_SizeMediaSpecificInfo); \
  3033. } \
  3034. }
  3035. /*
  3036. * VOID
  3037. * NdisSetPacketFlags(
  3038. * IN PNDIS_PACKET Packet,
  3039. * IN UINT Flags);
  3040. */
  3041. #define NdisSetPacketFlags(Packet, Flags) (Packet)->Private.Flags |= (Flags)
  3042. /*
  3043. * VOID
  3044. * NdisClearPacketFlags(
  3045. * IN PNDIS_PACKET Packet,
  3046. * IN UINT Flags);
  3047. */
  3048. #define NdisClearPacketFlags(Packet, Flags) (Packet)->Private.Flags &= ~(Flags)
  3049. /*
  3050. * VOID
  3051. * NdisQueryPacket(
  3052. * IN PNDIS_PACKET Packet,
  3053. * OUT PUINT PhysicalBufferCount OPTIONAL,
  3054. * OUT PUINT BufferCount OPTIONAL,
  3055. * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
  3056. * OUT PUINT TotalPacketLength OPTIONAL);
  3057. */
  3058. static __inline
  3059. VOID
  3060. NdisQueryPacket(
  3061. IN PNDIS_PACKET Packet,
  3062. OUT PUINT PhysicalBufferCount OPTIONAL,
  3063. OUT PUINT BufferCount OPTIONAL,
  3064. OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
  3065. OUT PUINT TotalPacketLength OPTIONAL)
  3066. {
  3067. if (FirstBuffer)
  3068. *FirstBuffer = Packet->Private.Head;
  3069. if (TotalPacketLength || BufferCount || PhysicalBufferCount) {
  3070. if (!Packet->Private.ValidCounts) {
  3071. UINT Offset;
  3072. UINT PacketLength;
  3073. PNDIS_BUFFER NdisBuffer;
  3074. UINT PhysicalBufferCount = 0;
  3075. UINT TotalPacketLength = 0;
  3076. UINT Count = 0;
  3077. for (NdisBuffer = Packet->Private.Head;
  3078. NdisBuffer != (PNDIS_BUFFER)NULL;
  3079. NdisBuffer = NdisBuffer->Next) {
  3080. PhysicalBufferCount += NDIS_BUFFER_TO_SPAN_PAGES(NdisBuffer);
  3081. NdisQueryBufferOffset(NdisBuffer, &Offset, &PacketLength);
  3082. TotalPacketLength += PacketLength;
  3083. Count++;
  3084. }
  3085. Packet->Private.PhysicalCount = PhysicalBufferCount;
  3086. Packet->Private.TotalLength = TotalPacketLength;
  3087. Packet->Private.Count = Count;
  3088. Packet->Private.ValidCounts = TRUE;
  3089. }
  3090. if (PhysicalBufferCount)
  3091. *PhysicalBufferCount = Packet->Private.PhysicalCount;
  3092. if (BufferCount)
  3093. *BufferCount = Packet->Private.Count;
  3094. if (TotalPacketLength)
  3095. *TotalPacketLength = Packet->Private.TotalLength;
  3096. }
  3097. }
  3098. /*
  3099. * VOID
  3100. * NdisQueryPacketLength(
  3101. * IN PNDIS_PACKET Packet,
  3102. * OUT PUINT PhysicalBufferCount OPTIONAL,
  3103. * OUT PUINT BufferCount OPTIONAL,
  3104. * OUT PNDIS_BUFFER *FirstBuffer OPTIONAL,
  3105. * OUT PUINT TotalPacketLength OPTIONAL);
  3106. */
  3107. #define NdisQueryPacketLength(_Packet, \
  3108. _TotalPacketLength) \
  3109. { \
  3110. if (!(_Packet)->Private.ValidCounts) { \
  3111. NdisQueryPacket(_Packet, NULL, NULL, NULL, _TotalPacketLength); \
  3112. } \
  3113. else *(_TotalPacketLength) = (_Packet)->Private.TotalLength; \
  3114. }
  3115. #endif /* NDIS_LEGACY_DRIVER */
  3116. /* Memory management routines */
  3117. /*
  3118. NDISAPI
  3119. VOID
  3120. NTAPI
  3121. NdisCreateLookaheadBufferFromSharedMemory(
  3122. IN PVOID pSharedMemory,
  3123. IN UINT LookaheadLength,
  3124. OUT PVOID *pLookaheadBuffer);
  3125. */
  3126. #define NdisCreateLookaheadBufferFromSharedMemory(_S, _L, _B) ((*(_B)) = (_S))
  3127. NDISAPI
  3128. VOID
  3129. NTAPI
  3130. NdisDestroyLookaheadBufferFromSharedMemory(
  3131. IN PVOID pLookaheadBuffer);
  3132. #if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_PPC)
  3133. /*
  3134. * VOID
  3135. * NdisMoveMappedMemory(
  3136. * OUT PVOID Destination,
  3137. * IN PVOID Source,
  3138. * IN ULONG Length);
  3139. */
  3140. #define NdisMoveMappedMemory(Destination, Source, Length) \
  3141. RtlCopyMemory(Destination, Source, Length)
  3142. /*
  3143. * VOID
  3144. * NdisZeroMappedMemory(
  3145. * IN PVOID Destination,
  3146. * IN ULONG Length);
  3147. */
  3148. #define NdisZeroMappedMemory(Destination, Length) \
  3149. RtlZeroMemory(Destination, Length)
  3150. #else
  3151. #define NdisMoveMappedMemory(Destination, Source, Length) \
  3152. { \
  3153. PUCHAR _Dest = Destination, _Src = Source, _End = _Dest + Length; \
  3154. while (_Dest < _End) \
  3155. *_Dest++ = _Src++; \
  3156. }
  3157. #define NdisZeroMappedMemory(Destination, Length) \
  3158. { \
  3159. PUCHAR _Dest = Destination, _End = _Dest + Length; \
  3160. while (_Dest < _End) \
  3161. *_Dest++ = 0; \
  3162. }
  3163. #endif /* _M_IX86 or _M_AMD64 */
  3164. /*
  3165. * VOID
  3166. * NdisMoveFromMappedMemory(
  3167. * OUT PVOID Destination,
  3168. * IN PVOID Source,
  3169. * IN ULONG Length);
  3170. */
  3171. #define NdisMoveFromMappedMemory(Destination, Source, Length) \
  3172. NdisMoveMappedMemory(Destination, Source, Length)
  3173. /*
  3174. * VOID
  3175. * NdisMoveToMappedMemory(
  3176. * OUT PVOID Destination,
  3177. * IN PVOID Source,
  3178. * IN ULONG Length);
  3179. */
  3180. #define NdisMoveToMappedMemory(Destination, Source, Length) \
  3181. NdisMoveMappedMemory(Destination, Source, Length)
  3182. /*
  3183. * VOID
  3184. * NdisMUpdateSharedMemory(
  3185. * IN NDIS_HANDLE MiniportAdapterHandle,
  3186. * IN ULONG Length,
  3187. * IN PVOID VirtualAddress,
  3188. * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
  3189. */
  3190. #define NdisMUpdateSharedMemory(_H, _L, _V, _P) \
  3191. NdisUpdateSharedMemory(_H, _L, _V, _P)
  3192. NDISAPI
  3193. VOID
  3194. NTAPI
  3195. NdisFreeMemory(
  3196. IN PVOID VirtualAddress,
  3197. IN UINT Length,
  3198. IN UINT MemoryFlags);
  3199. NDISAPI
  3200. VOID
  3201. NTAPI
  3202. NdisFreeMemoryWithTag(
  3203. IN PVOID VirtualAddress,
  3204. IN ULONG Tag);
  3205. NDISAPI
  3206. VOID
  3207. NTAPI
  3208. NdisImmediateReadSharedMemory(
  3209. IN NDIS_HANDLE WrapperConfigurationContext,
  3210. IN ULONG SharedMemoryAddress,
  3211. OUT PUCHAR Buffer,
  3212. IN ULONG Length);
  3213. NDISAPI
  3214. VOID
  3215. NTAPI
  3216. NdisImmediateWriteSharedMemory(
  3217. IN NDIS_HANDLE WrapperConfigurationContext,
  3218. IN ULONG SharedMemoryAddress,
  3219. IN PUCHAR Buffer,
  3220. IN ULONG Length);
  3221. NDISAPI
  3222. VOID
  3223. NTAPI
  3224. NdisMAllocateSharedMemory(
  3225. IN NDIS_HANDLE MiniportAdapterHandle,
  3226. IN ULONG Length,
  3227. IN BOOLEAN Cached,
  3228. OUT PVOID *VirtualAddress,
  3229. OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
  3230. NDISAPI
  3231. NDIS_STATUS
  3232. NTAPI
  3233. NdisMAllocateSharedMemoryAsync(
  3234. IN NDIS_HANDLE MiniportAdapterHandle,
  3235. IN ULONG Length,
  3236. IN BOOLEAN Cached,
  3237. IN PVOID Context);
  3238. #if defined(NDIS50)
  3239. #define NdisUpdateSharedMemory(NdisAdapterHandle, \
  3240. Length, \
  3241. VirtualAddress, \
  3242. PhysicalAddress)
  3243. #else
  3244. NDISAPI
  3245. VOID
  3246. NTAPI
  3247. NdisUpdateSharedMemory(
  3248. IN NDIS_HANDLE NdisAdapterHandle,
  3249. IN ULONG Length,
  3250. IN PVOID VirtualAddress,
  3251. IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
  3252. #endif /* defined(NDIS50) */
  3253. /*
  3254. * ULONG
  3255. * NdisGetPhysicalAddressHigh(
  3256. * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
  3257. */
  3258. #define NdisGetPhysicalAddressHigh(PhysicalAddress) \
  3259. ((PhysicalAddress).HighPart)
  3260. /*
  3261. * VOID
  3262. * NdisSetPhysicalAddressHigh(
  3263. * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
  3264. * IN ULONG Value);
  3265. */
  3266. #define NdisSetPhysicalAddressHigh(PhysicalAddress, Value) \
  3267. ((PhysicalAddress).HighPart) = (Value)
  3268. /*
  3269. * ULONG
  3270. * NdisGetPhysicalAddressLow(
  3271. * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
  3272. */
  3273. #define NdisGetPhysicalAddressLow(PhysicalAddress) \
  3274. ((PhysicalAddress).LowPart)
  3275. /*
  3276. * VOID
  3277. * NdisSetPhysicalAddressLow(
  3278. * IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
  3279. * IN ULONG Value);
  3280. */
  3281. #define NdisSetPhysicalAddressLow(PhysicalAddress, Value) \
  3282. ((PhysicalAddress).LowPart) = (Value)
  3283. /*
  3284. * VOID
  3285. * NDIS_PHYSICAL_ADDRESS_CONST(
  3286. * IN ULONG Low,
  3287. * IN LONG High);
  3288. */
  3289. #define NDIS_PHYSICAL_ADDRESS_CONST(Low, High) \
  3290. { {(ULONG)(Low), (LONG)(High)} }
  3291. /*
  3292. * ULONG
  3293. * NdisEqualMemory(
  3294. * IN CONST VOID *Source1,
  3295. * IN CONST VOID *Source2,
  3296. * IN ULONG Length);
  3297. */
  3298. #define NdisEqualMemory(Source1, Source2, Length) \
  3299. RtlEqualMemory(Source1, Source2, Length)
  3300. /*
  3301. * VOID
  3302. * NdisFillMemory(
  3303. * IN PVOID Destination,
  3304. * IN ULONG Length,
  3305. * IN UCHAR Fill);
  3306. */
  3307. #define NdisFillMemory(Destination, Length, Fill) \
  3308. RtlFillMemory(Destination, Length, Fill)
  3309. /*
  3310. * VOID
  3311. * NdisMoveMemory(
  3312. * OUT PVOID Destination,
  3313. * IN PVOID Source,
  3314. * IN ULONG Length);
  3315. */
  3316. #define NdisMoveMemory(Destination, Source, Length) \
  3317. RtlCopyMemory(Destination, Source, Length)
  3318. /*
  3319. * VOID
  3320. * NdisRetrieveUlong(
  3321. * IN PULONG DestinationAddress,
  3322. * IN PULONG SourceAddress);
  3323. */
  3324. #define NdisRetrieveUlong(DestinationAddress, SourceAddress) \
  3325. RtlRetrieveUlong(DestinationAddress, SourceAddress)
  3326. /*
  3327. * VOID
  3328. * NdisStoreUlong(
  3329. * IN PULONG DestinationAddress,
  3330. * IN ULONG Value);
  3331. */
  3332. #define NdisStoreUlong(DestinationAddress, Value) \
  3333. RtlStoreUlong(DestinationAddress, Value)
  3334. /*
  3335. * VOID
  3336. * NdisZeroMemory(
  3337. * IN PVOID Destination,
  3338. * IN ULONG Length)
  3339. */
  3340. #define NdisZeroMemory(Destination, Length) \
  3341. RtlZeroMemory(Destination, Length)
  3342. typedef VOID
  3343. (NTAPI *NDIS_BLOCK_INITIALIZER) (
  3344. IN PUCHAR Block,
  3345. IN SIZE_T NumberOfBytes
  3346. );
  3347. /* Configuration routines */
  3348. #if NDIS_LEGACY_DRIVER
  3349. NDISAPI
  3350. VOID
  3351. NTAPI
  3352. NdisOpenConfiguration(
  3353. OUT PNDIS_STATUS Status,
  3354. OUT PNDIS_HANDLE ConfigurationHandle,
  3355. IN NDIS_HANDLE WrapperConfigurationContext);
  3356. #endif
  3357. NDISAPI
  3358. VOID
  3359. NTAPI
  3360. NdisReadNetworkAddress(
  3361. OUT PNDIS_STATUS Status,
  3362. OUT PVOID *NetworkAddress,
  3363. OUT PUINT NetworkAddressLength,
  3364. IN NDIS_HANDLE ConfigurationHandle);
  3365. NDISAPI
  3366. VOID
  3367. NTAPI
  3368. NdisReadEisaSlotInformation(
  3369. OUT PNDIS_STATUS Status,
  3370. IN NDIS_HANDLE WrapperConfigurationContext,
  3371. OUT PUINT SlotNumber,
  3372. OUT PNDIS_EISA_FUNCTION_INFORMATION EisaData);
  3373. NDISAPI
  3374. VOID
  3375. NTAPI
  3376. NdisReadEisaSlotInformationEx(
  3377. OUT PNDIS_STATUS Status,
  3378. IN NDIS_HANDLE WrapperConfigurationContext,
  3379. OUT PUINT SlotNumber,
  3380. OUT PNDIS_EISA_FUNCTION_INFORMATION *EisaData,
  3381. OUT PUINT NumberOfFunctions);
  3382. #if NDIS_LEGACY_MINIPORT
  3383. NDISAPI
  3384. ULONG
  3385. NTAPI
  3386. NdisReadPciSlotInformation(
  3387. IN NDIS_HANDLE NdisAdapterHandle,
  3388. IN ULONG SlotNumber,
  3389. IN ULONG Offset,
  3390. OUT PVOID Buffer,
  3391. IN ULONG Length);
  3392. NDISAPI
  3393. ULONG
  3394. NTAPI
  3395. NdisWritePciSlotInformation(
  3396. IN NDIS_HANDLE NdisAdapterHandle,
  3397. IN ULONG SlotNumber,
  3398. IN ULONG Offset,
  3399. IN PVOID Buffer,
  3400. IN ULONG Length);
  3401. NDISAPI
  3402. ULONG
  3403. NTAPI
  3404. NdisReadPcmciaAttributeMemory(
  3405. IN NDIS_HANDLE NdisAdapterHandle,
  3406. IN ULONG Offset,
  3407. OUT PVOID Buffer,
  3408. IN ULONG Length);
  3409. NDISAPI
  3410. ULONG
  3411. NTAPI
  3412. NdisWritePcmciaAttributeMemory(
  3413. IN NDIS_HANDLE NdisAdapterHandle,
  3414. IN ULONG Offset,
  3415. IN PVOID Buffer,
  3416. IN ULONG Length);
  3417. #endif /* NDIS_LEGACY_MINIPORT */
  3418. /* String management routines */
  3419. /*
  3420. NDISAPI
  3421. NDIS_STATUS
  3422. NTAPI
  3423. NdisAnsiStringToUnicodeString(
  3424. IN OUT PNDIS_STRING DestinationString,
  3425. IN PNDIS_ANSI_STRING SourceString);
  3426. */
  3427. #define NdisAnsiStringToUnicodeString(_us, _as) RtlAnsiStringToUnicodeString(_us, _as, FALSE)
  3428. /*
  3429. * BOOLEAN
  3430. * NdisEqualString(
  3431. * IN PNDIS_STRING String1,
  3432. * IN PNDIS_STRING String2,
  3433. * IN BOOLEAN CaseInsensitive);
  3434. */
  3435. #define NdisEqualString RtlEqualString
  3436. #define NdisEqualUnicodeString RtlEqualUnicodeString
  3437. /*
  3438. NDISAPI
  3439. VOID
  3440. NTAPI
  3441. NdisInitAnsiString(
  3442. IN OUT PNDIS_ANSI_STRING DestinationString,
  3443. IN PCSTR SourceString);
  3444. */
  3445. #define NdisInitAnsiString RtlInitString
  3446. NDISAPI
  3447. VOID
  3448. NTAPI
  3449. NdisInitUnicodeString(
  3450. IN OUT PNDIS_STRING DestinationString,
  3451. IN PCWSTR SourceString);
  3452. /*
  3453. NDISAPI
  3454. NDIS_STATUS
  3455. NTAPI
  3456. NdisUnicodeStringToAnsiString(
  3457. IN OUT PNDIS_ANSI_STRING DestinationString,
  3458. IN PNDIS_STRING SourceString);
  3459. */
  3460. #define NdisUnicodeStringToAnsiString(_as, _us) RtlUnicodeStringToAnsiString(_as, _us, FALSE)
  3461. #define NdisFreeString(_s) NdisFreeMemory((_s).Buffer, (_s).MaximumLength, 0)
  3462. #define NdisPrintString(_s) DbgPrint("%ls", (_s).Buffer)
  3463. /* Spin lock reoutines */
  3464. /*
  3465. NDISAPI
  3466. VOID
  3467. NTAPI
  3468. NdisAllocateSpinLock(
  3469. IN PNDIS_SPIN_LOCK SpinLock);
  3470. */
  3471. #define NdisAllocateSpinLock(_SpinLock) KeInitializeSpinLock(&(_SpinLock)->SpinLock)
  3472. /*
  3473. NDISAPI
  3474. VOID
  3475. NTAPI
  3476. NdisFreeSpinLock(
  3477. IN PNDIS_SPIN_LOCK SpinLock);
  3478. */
  3479. #define NdisFreeSpinLock(_SpinLock)
  3480. /*
  3481. NDISAPI
  3482. VOID
  3483. NTAPI
  3484. NdisAcquireSpinLock(
  3485. IN PNDIS_SPIN_LOCK SpinLock);
  3486. */
  3487. #define NdisAcquireSpinLock(_SpinLock) KeAcquireSpinLock(&(_SpinLock)->SpinLock, &(_SpinLock)->OldIrql)
  3488. /*
  3489. NDISAPI
  3490. VOID
  3491. NTAPI
  3492. NdisReleaseSpinLock(
  3493. IN PNDIS_SPIN_LOCK SpinLock);
  3494. */
  3495. #define NdisReleaseSpinLock(_SpinLock) KeReleaseSpinLock(&(_SpinLock)->SpinLock,(_SpinLock)->OldIrql)
  3496. /*
  3497. NDISAPI
  3498. VOID
  3499. NTAPI
  3500. NdisDprAcquireSpinLock(
  3501. IN PNDIS_SPIN_LOCK SpinLock);
  3502. */
  3503. #define NdisDprAcquireSpinLock(_SpinLock) KeAcquireSpinLockAtDpcLevel(&(_SpinLock)->SpinLock)
  3504. /*
  3505. NDISAPI
  3506. VOID
  3507. NTAPI
  3508. NdisDprReleaseSpinLock(
  3509. IN PNDIS_SPIN_LOCK SpinLock);
  3510. */
  3511. #define NdisDprReleaseSpinLock(_SpinLock) KeReleaseSpinLockFromDpcLevel(&(_SpinLock)->SpinLock)
  3512. /* I/O routines */
  3513. /*
  3514. * VOID
  3515. * NdisRawReadPortBufferUchar(
  3516. * IN ULONG Port,
  3517. * OUT PUCHAR Buffer,
  3518. * IN ULONG Length);
  3519. */
  3520. #define NdisRawReadPortBufferUchar(Port, Buffer, Length) \
  3521. READ_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
  3522. /*
  3523. * VOID
  3524. * NdisRawReadPortBufferUlong(
  3525. * IN ULONG Port,
  3526. * OUT PULONG Buffer,
  3527. * IN ULONG Length);
  3528. */
  3529. #define NdisRawReadPortBufferUlong(Port, Buffer, Length) \
  3530. READ_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
  3531. /*
  3532. * VOID
  3533. * NdisRawReadPortBufferUshort(
  3534. * IN ULONG Port,
  3535. * OUT PUSHORT Buffer,
  3536. * IN ULONG Length);
  3537. */
  3538. #define NdisRawReadPortBufferUshort(Port, Buffer, Length) \
  3539. READ_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
  3540. /*
  3541. * VOID
  3542. * NdisRawReadPortUchar(
  3543. * IN ULONG Port,
  3544. * OUT PUCHAR Data);
  3545. */
  3546. #define NdisRawReadPortUchar(Port, Data) \
  3547. *(Data) = READ_PORT_UCHAR((PUCHAR)(Port))
  3548. /*
  3549. * VOID
  3550. * NdisRawReadPortUlong(
  3551. * IN ULONG Port,
  3552. * OUT PULONG Data);
  3553. */
  3554. #define NdisRawReadPortUlong(Port, Data) \
  3555. *(Data) = READ_PORT_ULONG((PULONG)(Port))
  3556. /*
  3557. * VOID
  3558. * NdisRawReadPortUshort(
  3559. * IN ULONG Port,
  3560. * OUT PUSHORT Data);
  3561. */
  3562. #define NdisRawReadPortUshort(Port, Data) \
  3563. *(Data) = READ_PORT_USHORT((PUSHORT)(Port))
  3564. /*
  3565. * VOID
  3566. * NdisRawWritePortBufferUchar(
  3567. * IN ULONG Port,
  3568. * IN PUCHAR Buffer,
  3569. * IN ULONG Length);
  3570. */
  3571. #define NdisRawWritePortBufferUchar(Port, Buffer, Length) \
  3572. WRITE_PORT_BUFFER_UCHAR((PUCHAR)(Port), (PUCHAR)(Buffer), (Length))
  3573. /*
  3574. * VOID
  3575. * NdisRawWritePortBufferUlong(
  3576. * IN ULONG Port,
  3577. * IN PULONG Buffer,
  3578. * IN ULONG Length);
  3579. */
  3580. #define NdisRawWritePortBufferUlong(Port, Buffer, Length) \
  3581. WRITE_PORT_BUFFER_ULONG((PULONG)(Port), (PULONG)(Buffer), (Length))
  3582. /*
  3583. * VOID
  3584. * NdisRawWritePortBufferUshort(
  3585. * IN ULONG Port,
  3586. * IN PUSHORT Buffer,
  3587. * IN ULONG Length);
  3588. */
  3589. #define NdisRawWritePortBufferUshort(Port, Buffer, Length) \
  3590. WRITE_PORT_BUFFER_USHORT((PUSHORT)(Port), (PUSHORT)(Buffer), (Length))
  3591. /*
  3592. * VOID
  3593. * NdisRawWritePortUchar(
  3594. * IN ULONG Port,
  3595. * IN UCHAR Data);
  3596. */
  3597. #define NdisRawWritePortUchar(Port, Data) \
  3598. WRITE_PORT_UCHAR((PUCHAR)(Port), (UCHAR)(Data))
  3599. /*
  3600. * VOID
  3601. * NdisRawWritePortUlong(
  3602. * IN ULONG Port,
  3603. * IN ULONG Data);
  3604. */
  3605. #define NdisRawWritePortUlong(Port, Data) \
  3606. WRITE_PORT_ULONG((PULONG)(Port), (ULONG)(Data))
  3607. /*
  3608. * VOID
  3609. * NdisRawWritePortUshort(
  3610. * IN ULONG Port,
  3611. * IN USHORT Data);
  3612. */
  3613. #define NdisRawWritePortUshort(Port, Data) \
  3614. WRITE_PORT_USHORT((PUSHORT)(Port), (USHORT)(Data))
  3615. /*
  3616. * VOID
  3617. * NdisReadRegisterUchar(
  3618. * IN PUCHAR Register,
  3619. * OUT PUCHAR Data);
  3620. */
  3621. #define NdisReadRegisterUchar(Register, Data) \
  3622. *(Data) = *(Register)
  3623. /*
  3624. * VOID
  3625. * NdisReadRegisterUlong(
  3626. * IN PULONG Register,
  3627. * OUT PULONG Data);
  3628. */
  3629. #define NdisReadRegisterUlong(Register, Data) \
  3630. *(Data) = *(Register)
  3631. /*
  3632. * VOID
  3633. * NdisReadRegisterUshort(
  3634. * IN PUSHORT Register,
  3635. * OUT PUSHORT Data);
  3636. */
  3637. #define NdisReadRegisterUshort(Register, Data) \
  3638. *(Data) = *(Register)
  3639. /*
  3640. * VOID
  3641. * NdisReadRegisterUchar(
  3642. * IN PUCHAR Register,
  3643. * IN UCHAR Data);
  3644. */
  3645. #define NdisWriteRegisterUchar(Register, Data) \
  3646. WRITE_REGISTER_UCHAR((Register), (Data))
  3647. /*
  3648. * VOID
  3649. * NdisReadRegisterUlong(
  3650. * IN PULONG Register,
  3651. * IN ULONG Data);
  3652. */
  3653. #define NdisWriteRegisterUlong(Register, Data) \
  3654. WRITE_REGISTER_ULONG((Register), (Data))
  3655. /*
  3656. * VOID
  3657. * NdisReadRegisterUshort(
  3658. * IN PUSHORT Register,
  3659. * IN USHORT Data);
  3660. */
  3661. #define NdisWriteRegisterUshort(Register, Data) \
  3662. WRITE_REGISTER_USHORT((Register), (Data))
  3663. /* Linked lists */
  3664. /*
  3665. * VOID
  3666. * NdisInitializeListHead(
  3667. * IN PLIST_ENTRY ListHead);
  3668. */
  3669. #define NdisInitializeListHead InitializeListHead
  3670. /*
  3671. * PLIST_ENTRY
  3672. * NdisInterlockedInsertHeadList(
  3673. * IN PLIST_ENTRY ListHead,
  3674. * IN PLIST_ENTRY ListEntry,
  3675. * IN PNDIS_SPIN_LOCK SpinLock);
  3676. */
  3677. #define NdisInterlockedInsertHeadList(_ListHead, _ListEntry, _SpinLock) \
  3678. ExInterlockedInsertHeadList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
  3679. /*
  3680. * PLIST_ENTRY
  3681. * NdisInterlockedInsertTailList(
  3682. * IN PLIST_ENTRY ListHead,
  3683. * IN PLIST_ENTRY ListEntry,
  3684. * IN PNDIS_SPIN_LOCK SpinLock);
  3685. */
  3686. #define NdisInterlockedInsertTailList(_ListHead, _ListEntry, _SpinLock) \
  3687. ExInterlockedInsertTailList(_ListHead, _ListEntry, &(_SpinLock)->SpinLock)
  3688. /*
  3689. * PLIST_ENTRY
  3690. * NdisInterlockedRemoveHeadList(
  3691. * IN PLIST_ENTRY ListHead,
  3692. * IN PNDIS_SPIN_LOCK SpinLock);
  3693. */
  3694. #define NdisInterlockedRemoveHeadList(_ListHead, _SpinLock) \
  3695. ExInterlockedRemoveHeadList(_ListHead, &(_SpinLock)->SpinLock)
  3696. /*
  3697. * VOID
  3698. * NdisInitializeSListHead(
  3699. * IN PSLIST_HEADER SListHead);
  3700. */
  3701. #define NdisInitializeSListHead(SListHead) ExInitializeSListHead(SListHead)
  3702. /*
  3703. * USHORT NdisQueryDepthSList(
  3704. * IN PSLIST_HEADER SListHead);
  3705. */
  3706. #define NdisQueryDepthSList(SListHead) ExQueryDepthSList(SListHead)
  3707. #define NdisInterlockedPushEntryList(ListHead, ListEntry, Lock) \
  3708. ExInterlockedPushEntryList(ListHead, ListEntry, &(Lock)->SpinLock)
  3709. #define NdisInterlockedPopEntryList(ListHead, Lock) \
  3710. ExInterlockedPopEntryList(ListHead, &(Lock)->SpinLock)
  3711. /* Non-paged lookaside lists */
  3712. #define NdisInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D) \
  3713. ExInitializeNPagedLookasideList(_L, _AR, _FR, _Fl, _S, _T, _D)
  3714. #define NdisDeleteNPagedLookasideList(_L) ExDeleteNPagedLookasideList(_L)
  3715. #define NdisAllocateFromNPagedLookasideList(_L) ExAllocateFromNPagedLookasideList(_L)
  3716. #define NdisFreeToNPagedLookasideList(_L, _E) ExFreeToNPagedLookasideList(_L, _E)
  3717. /* Interlocked routines */
  3718. /*
  3719. * LONG
  3720. * NdisInterlockedDecrement(
  3721. * IN PLONG Addend);
  3722. */
  3723. #define NdisInterlockedDecrement(Addend) InterlockedDecrement(Addend)
  3724. /*
  3725. * LONG
  3726. * NdisInterlockedIncrement(
  3727. * IN PLONG Addend);
  3728. */
  3729. #define NdisInterlockedIncrement(Addend) InterlockedIncrement(Addend)
  3730. /*
  3731. * VOID
  3732. * NdisInterlockedAddUlong(
  3733. * IN PULONG Addend,
  3734. * IN ULONG Increment,
  3735. * IN PNDIS_SPIN_LOCK SpinLock);
  3736. */
  3737. #define NdisInterlockedAddUlong(_Addend, _Increment, _SpinLock) \
  3738. ExInterlockedAddUlong(_Addend, _Increment, &(_SpinLock)->SpinLock)
  3739. /* Miscellaneous routines */
  3740. NDISAPI
  3741. VOID
  3742. NTAPI
  3743. NdisCloseConfiguration(
  3744. IN NDIS_HANDLE ConfigurationHandle);
  3745. NDISAPI
  3746. VOID
  3747. NTAPI
  3748. NdisReadConfiguration(
  3749. OUT PNDIS_STATUS Status,
  3750. OUT PNDIS_CONFIGURATION_PARAMETER *ParameterValue,
  3751. IN NDIS_HANDLE ConfigurationHandle,
  3752. IN PNDIS_STRING Keyword,
  3753. IN NDIS_PARAMETER_TYPE ParameterType);
  3754. NDISAPI
  3755. VOID
  3756. NTAPI
  3757. NdisWriteConfiguration(
  3758. OUT PNDIS_STATUS Status,
  3759. IN NDIS_HANDLE WrapperConfigurationContext,
  3760. IN PNDIS_STRING Keyword,
  3761. IN PNDIS_CONFIGURATION_PARAMETER ParameterValue);
  3762. NDISAPI
  3763. VOID
  3764. __cdecl
  3765. NdisWriteErrorLogEntry(
  3766. IN NDIS_HANDLE NdisAdapterHandle,
  3767. IN NDIS_ERROR_CODE ErrorCode,
  3768. IN ULONG NumberOfErrorValues,
  3769. IN ...);
  3770. NDISAPI
  3771. VOID
  3772. NTAPI
  3773. NdisInitializeString(
  3774. OUT PNDIS_STRING Destination,
  3775. IN PUCHAR Source);
  3776. /*
  3777. * VOID
  3778. * NdisStallExecution(
  3779. * IN UINT MicrosecondsToStall)
  3780. */
  3781. #define NdisStallExecution KeStallExecutionProcessor
  3782. /*
  3783. NDISAPI
  3784. VOID
  3785. NTAPI
  3786. NdisGetCurrentSystemTime(
  3787. IN PLARGE_INTEGER pSystemTime);
  3788. */
  3789. #define NdisGetCurrentSystemTime KeQuerySystemTime
  3790. #if NDIS_SUPPORT_60_COMPATIBLE_API
  3791. NDISAPI
  3792. CCHAR
  3793. NTAPI
  3794. NdisSystemProcessorCount(VOID);
  3795. #endif
  3796. NDISAPI
  3797. VOID
  3798. NTAPI
  3799. NdisGetCurrentProcessorCpuUsage(
  3800. OUT PULONG pCpuUsage);
  3801. /* NDIS helper macros */
  3802. /*
  3803. * VOID
  3804. * NDIS_INIT_FUNCTION(FunctionName)
  3805. */
  3806. #define NDIS_INIT_FUNCTION(FunctionName) \
  3807. alloc_text(init, FunctionName)
  3808. /*
  3809. * VOID
  3810. * NDIS_PAGABLE_FUNCTION(FunctionName)
  3811. */
  3812. #define NDIS_PAGEABLE_FUNCTION(FunctionName) \
  3813. alloc_text(page, FunctionName)
  3814. #define NDIS_PAGABLE_FUNCTION NDIS_PAGEABLE_FUNCTION
  3815. /* NDIS 4.0 extensions */
  3816. NDISAPI
  3817. VOID
  3818. NTAPI
  3819. NdisMFreeSharedMemory(
  3820. IN NDIS_HANDLE MiniportAdapterHandle,
  3821. IN ULONG Length,
  3822. IN BOOLEAN Cached,
  3823. IN PVOID VirtualAddress,
  3824. IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
  3825. NDISAPI
  3826. VOID
  3827. NTAPI
  3828. NdisMWanIndicateReceive(
  3829. OUT PNDIS_STATUS Status,
  3830. IN NDIS_HANDLE MiniportAdapterHandle,
  3831. IN NDIS_HANDLE NdisLinkContext,
  3832. IN PUCHAR PacketBuffer,
  3833. IN UINT PacketSize);
  3834. NDISAPI
  3835. VOID
  3836. NTAPI
  3837. NdisMWanIndicateReceiveComplete(
  3838. IN NDIS_HANDLE MiniportAdapterHandle
  3839. IN NDIS_HANDLE NdisLinkContext);
  3840. NDISAPI
  3841. VOID
  3842. NTAPI
  3843. NdisMWanSendComplete(
  3844. IN NDIS_HANDLE MiniportAdapterHandle,
  3845. IN PNDIS_WAN_PACKET Packet,
  3846. IN NDIS_STATUS Status);
  3847. NDISAPI
  3848. NDIS_STATUS
  3849. NTAPI
  3850. NdisPciAssignResources(
  3851. IN NDIS_HANDLE NdisMacHandle,
  3852. IN NDIS_HANDLE NdisWrapperHandle,
  3853. IN NDIS_HANDLE WrapperConfigurationContext,
  3854. IN ULONG SlotNumber,
  3855. OUT PNDIS_RESOURCE_LIST *AssignedResources);
  3856. /* NDIS 5.0 extensions */
  3857. NDISAPI
  3858. NDIS_STATUS
  3859. NTAPI
  3860. NdisAllocateMemoryWithTag(
  3861. OUT PVOID *VirtualAddress,
  3862. IN UINT Length,
  3863. IN ULONG Tag);
  3864. NDISAPI
  3865. VOID
  3866. NTAPI
  3867. NdisGetCurrentProcessorCounts(
  3868. OUT PULONG pIdleCount,
  3869. OUT PULONG pKernelAndUser,
  3870. OUT PULONG pIndex);
  3871. #if NDIS_LEGACY_DRIVER
  3872. NDISAPI
  3873. VOID
  3874. NTAPI
  3875. NdisGetSystemUpTime(
  3876. OUT PULONG pSystemUpTime);
  3877. #endif
  3878. #if NDIS_SUPPORT_60_COMPATIBLE_API
  3879. NDISAPI
  3880. VOID
  3881. NTAPI
  3882. NdisAcquireReadWriteLock(
  3883. IN OUT PNDIS_RW_LOCK Lock,
  3884. IN BOOLEAN fWrite,
  3885. OUT PLOCK_STATE LockState);
  3886. NDISAPI
  3887. VOID
  3888. NTAPI
  3889. NdisInitializeReadWriteLock(
  3890. OUT PNDIS_RW_LOCK Lock);
  3891. NDISAPI
  3892. VOID
  3893. NTAPI
  3894. NdisReleaseReadWriteLock(
  3895. IN OUT PNDIS_RW_LOCK Lock,
  3896. IN PLOCK_STATE LockState);
  3897. #if NDIS_SUPPORT_NDIS6
  3898. NDISAPI
  3899. VOID
  3900. NTAPI
  3901. NdisDprAcquireReadWriteLock(
  3902. IN PNDIS_RW_LOCK Lock,
  3903. IN BOOLEAN fWrite,
  3904. IN PLOCK_STATE LockState);
  3905. NDISAPI
  3906. VOID
  3907. NTAPI
  3908. NdisDprReleaseReadWriteLock(
  3909. IN PNDIS_RW_LOCK Lock,
  3910. IN PLOCK_STATE LockState);
  3911. #endif /* NDIS_SUPPORT_NDIS6 */
  3912. #endif /* NDIS_SUPPORT_60_COMPATIBLE_API */
  3913. NDISAPI
  3914. NDIS_STATUS
  3915. NTAPI
  3916. NdisMDeregisterDevice(
  3917. IN NDIS_HANDLE NdisDeviceHandle);
  3918. NDISAPI
  3919. VOID
  3920. NTAPI
  3921. NdisMGetDeviceProperty(
  3922. IN NDIS_HANDLE MiniportAdapterHandle,
  3923. IN OUT PDEVICE_OBJECT *PhysicalDeviceObject OPTIONAL,
  3924. IN OUT PDEVICE_OBJECT *FunctionalDeviceObject OPTIONAL,
  3925. IN OUT PDEVICE_OBJECT *NextDeviceObject OPTIONAL,
  3926. IN OUT PCM_RESOURCE_LIST *AllocatedResources OPTIONAL,
  3927. IN OUT PCM_RESOURCE_LIST *AllocatedResourcesTranslated OPTIONAL);
  3928. NDISAPI
  3929. NDIS_STATUS
  3930. NTAPI
  3931. NdisMInitializeScatterGatherDma(
  3932. IN NDIS_HANDLE MiniportAdapterHandle,
  3933. IN BOOLEAN Dma64BitAddresses,
  3934. IN ULONG MaximumPhysicalMapping);
  3935. NDISAPI
  3936. NDIS_STATUS
  3937. NTAPI
  3938. NdisMPromoteMiniport(
  3939. IN NDIS_HANDLE MiniportAdapterHandle);
  3940. NDISAPI
  3941. NDIS_STATUS
  3942. NTAPI
  3943. NdisMQueryAdapterInstanceName(
  3944. OUT PNDIS_STRING AdapterInstanceName,
  3945. IN NDIS_HANDLE MiniportAdapterHandle);
  3946. NDISAPI
  3947. NDIS_STATUS
  3948. NTAPI
  3949. NdisMRegisterDevice(
  3950. IN NDIS_HANDLE NdisWrapperHandle,
  3951. IN PNDIS_STRING DeviceName,
  3952. IN PNDIS_STRING SymbolicName,
  3953. IN PDRIVER_DISPATCH MajorFunctions[],
  3954. OUT PDEVICE_OBJECT *pDeviceObject,
  3955. OUT NDIS_HANDLE *NdisDeviceHandle);
  3956. NDISAPI
  3957. VOID
  3958. NTAPI
  3959. NdisMRegisterUnloadHandler(
  3960. IN NDIS_HANDLE NdisWrapperHandle,
  3961. IN PDRIVER_UNLOAD UnloadHandler);
  3962. NDISAPI
  3963. NDIS_STATUS
  3964. NTAPI
  3965. NdisMRemoveMiniport(
  3966. IN NDIS_HANDLE MiniportAdapterHandle);
  3967. NDISAPI
  3968. NDIS_STATUS
  3969. NTAPI
  3970. NdisMSetMiniportSecondary(
  3971. IN NDIS_HANDLE MiniportAdapterHandle,
  3972. IN NDIS_HANDLE PrimaryMiniportAdapterHandle);
  3973. NDISAPI
  3974. VOID
  3975. NTAPI
  3976. NdisOpenConfigurationKeyByIndex(
  3977. OUT PNDIS_STATUS Status,
  3978. IN NDIS_HANDLE ConfigurationHandle,
  3979. IN ULONG Index,
  3980. OUT PNDIS_STRING KeyName,
  3981. OUT PNDIS_HANDLE KeyHandle);
  3982. NDISAPI
  3983. VOID
  3984. NTAPI
  3985. NdisOpenConfigurationKeyByName(
  3986. OUT PNDIS_STATUS Status,
  3987. IN NDIS_HANDLE ConfigurationHandle,
  3988. IN PNDIS_STRING SubKeyName,
  3989. OUT PNDIS_HANDLE SubKeyHandle);
  3990. NDISAPI
  3991. NDIS_STATUS
  3992. NTAPI
  3993. NdisQueryAdapterInstanceName(
  3994. OUT PNDIS_STRING AdapterInstanceName,
  3995. IN NDIS_HANDLE NdisBindingHandle);
  3996. NDISAPI
  3997. NDIS_STATUS
  3998. NTAPI
  3999. NdisQueryBindInstanceName(
  4000. OUT PNDIS_STRING pAdapterInstanceName,
  4001. IN NDIS_HANDLE BindingContext);
  4002. NDISAPI
  4003. NDIS_STATUS
  4004. NTAPI
  4005. NdisWriteEventLogEntry(
  4006. IN PVOID LogHandle,
  4007. IN NDIS_STATUS EventCode,
  4008. IN ULONG UniqueEventValue,
  4009. IN USHORT NumStrings,
  4010. IN PVOID StringsList OPTIONAL,
  4011. IN ULONG DataSize,
  4012. IN PVOID Data OPTIONAL);
  4013. /* Connectionless services */
  4014. NDISAPI
  4015. NDIS_STATUS
  4016. NTAPI
  4017. NdisClAddParty(
  4018. IN NDIS_HANDLE NdisVcHandle,
  4019. IN NDIS_HANDLE ProtocolPartyContext,
  4020. IN OUT PCO_CALL_PARAMETERS CallParameters,
  4021. OUT PNDIS_HANDLE NdisPartyHandle);
  4022. NDISAPI
  4023. NDIS_STATUS
  4024. NTAPI
  4025. NdisClCloseAddressFamily(
  4026. IN NDIS_HANDLE NdisAfHandle);
  4027. NDISAPI
  4028. NDIS_STATUS
  4029. NTAPI
  4030. NdisClCloseCall(
  4031. IN NDIS_HANDLE NdisVcHandle,
  4032. IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
  4033. IN PVOID Buffer OPTIONAL,
  4034. IN UINT Size);
  4035. NDISAPI
  4036. NDIS_STATUS
  4037. NTAPI
  4038. NdisClDeregisterSap(
  4039. IN NDIS_HANDLE NdisSapHandle);
  4040. NDISAPI
  4041. NDIS_STATUS
  4042. NTAPI
  4043. NdisClDropParty(
  4044. IN NDIS_HANDLE NdisPartyHandle,
  4045. IN PVOID Buffer OPTIONAL,
  4046. IN UINT Size);
  4047. NDISAPI
  4048. VOID
  4049. NTAPI
  4050. NdisClIncomingCallComplete(
  4051. IN NDIS_STATUS Status,
  4052. IN NDIS_HANDLE NdisVcHandle,
  4053. IN PCO_CALL_PARAMETERS CallParameters);
  4054. NDISAPI
  4055. NDIS_STATUS
  4056. NTAPI
  4057. NdisClMakeCall(
  4058. IN NDIS_HANDLE NdisVcHandle,
  4059. IN OUT PCO_CALL_PARAMETERS CallParameters,
  4060. IN NDIS_HANDLE ProtocolPartyContext OPTIONAL,
  4061. OUT PNDIS_HANDLE NdisPartyHandle OPTIONAL);
  4062. NDISAPI
  4063. NDIS_STATUS
  4064. NTAPI
  4065. NdisClModifyCallQoS(
  4066. IN NDIS_HANDLE NdisVcHandle,
  4067. IN PCO_CALL_PARAMETERS CallParameters);
  4068. NDISAPI
  4069. NDIS_STATUS
  4070. NTAPI
  4071. NdisClOpenAddressFamily(
  4072. IN NDIS_HANDLE NdisBindingHandle,
  4073. IN PCO_ADDRESS_FAMILY AddressFamily,
  4074. IN NDIS_HANDLE ProtocolAfContext,
  4075. IN PNDIS_CLIENT_CHARACTERISTICS ClCharacteristics,
  4076. IN UINT SizeOfClCharacteristics,
  4077. OUT PNDIS_HANDLE NdisAfHandle);
  4078. NDISAPI
  4079. NDIS_STATUS
  4080. NTAPI
  4081. NdisClRegisterSap(
  4082. IN NDIS_HANDLE NdisAfHandle,
  4083. IN NDIS_HANDLE ProtocolSapContext,
  4084. IN PCO_SAP Sap,
  4085. OUT PNDIS_HANDLE NdisSapHandle);
  4086. /* Call Manager services */
  4087. NDISAPI
  4088. NDIS_STATUS
  4089. NTAPI
  4090. NdisCmActivateVc(
  4091. IN NDIS_HANDLE NdisVcHandle,
  4092. IN OUT PCO_CALL_PARAMETERS CallParameters);
  4093. NDISAPI
  4094. VOID
  4095. NTAPI
  4096. NdisCmAddPartyComplete(
  4097. IN NDIS_STATUS Status,
  4098. IN NDIS_HANDLE NdisPartyHandle,
  4099. IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
  4100. IN PCO_CALL_PARAMETERS CallParameters);
  4101. NDISAPI
  4102. VOID
  4103. NTAPI
  4104. NdisCmCloseAddressFamilyComplete(
  4105. IN NDIS_STATUS Status,
  4106. IN NDIS_HANDLE NdisAfHandle);
  4107. NDISAPI
  4108. VOID
  4109. NTAPI
  4110. NdisCmCloseCallComplete(
  4111. IN NDIS_STATUS Status,
  4112. IN NDIS_HANDLE NdisVcHandle,
  4113. IN NDIS_HANDLE NdisPartyHandle OPTIONAL);
  4114. NDISAPI
  4115. NDIS_STATUS
  4116. NTAPI
  4117. NdisCmDeactivateVc(
  4118. IN NDIS_HANDLE NdisVcHandle);
  4119. NDISAPI
  4120. VOID
  4121. NTAPI
  4122. NdisCmDeregisterSapComplete(
  4123. IN NDIS_STATUS Status,
  4124. IN NDIS_HANDLE NdisSapHandle);
  4125. NDISAPI
  4126. VOID
  4127. NTAPI
  4128. NdisCmDispatchCallConnected(
  4129. IN NDIS_HANDLE NdisVcHandle);
  4130. NDISAPI
  4131. NDIS_STATUS
  4132. NTAPI
  4133. NdisCmDispatchIncomingCall(
  4134. IN NDIS_HANDLE NdisSapHandle,
  4135. IN NDIS_HANDLE NdisVcHandle,
  4136. IN PCO_CALL_PARAMETERS CallParameters);
  4137. NDISAPI
  4138. VOID
  4139. NTAPI
  4140. NdisCmDispatchIncomingCallQoSChange(
  4141. IN NDIS_HANDLE NdisVcHandle,
  4142. IN PCO_CALL_PARAMETERS CallParameters);
  4143. NDISAPI
  4144. VOID
  4145. NTAPI
  4146. NdisCmDispatchIncomingCloseCall(
  4147. IN NDIS_STATUS CloseStatus,
  4148. IN NDIS_HANDLE NdisVcHandle,
  4149. IN PVOID Buffer OPTIONAL,
  4150. IN UINT Size);
  4151. NDISAPI
  4152. VOID
  4153. NTAPI
  4154. NdisCmDispatchIncomingDropParty(
  4155. IN NDIS_STATUS DropStatus,
  4156. IN NDIS_HANDLE NdisPartyHandle,
  4157. IN PVOID Buffer OPTIONAL,
  4158. IN UINT Size);
  4159. NDISAPI
  4160. VOID
  4161. NTAPI
  4162. NdisCmDropPartyComplete(
  4163. IN NDIS_STATUS Status,
  4164. IN NDIS_HANDLE NdisPartyHandle);
  4165. NDISAPI
  4166. VOID
  4167. NTAPI
  4168. NdisCmMakeCallComplete(
  4169. IN NDIS_STATUS Status,
  4170. IN NDIS_HANDLE NdisVcHandle,
  4171. IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
  4172. IN NDIS_HANDLE CallMgrPartyContext OPTIONAL,
  4173. IN PCO_CALL_PARAMETERS CallParameters);
  4174. NDISAPI
  4175. VOID
  4176. NTAPI
  4177. NdisCmModifyCallQoSComplete(
  4178. IN NDIS_STATUS Status,
  4179. IN NDIS_HANDLE NdisVcHandle,
  4180. IN PCO_CALL_PARAMETERS CallParameters);
  4181. NDISAPI
  4182. VOID
  4183. NTAPI
  4184. NdisCmOpenAddressFamilyComplete(
  4185. IN NDIS_STATUS Status,
  4186. IN NDIS_HANDLE NdisAfHandle,
  4187. IN NDIS_HANDLE CallMgrAfContext);
  4188. NDISAPI
  4189. NDIS_STATUS
  4190. NTAPI
  4191. NdisCmRegisterAddressFamily(
  4192. IN NDIS_HANDLE NdisBindingHandle,
  4193. IN PCO_ADDRESS_FAMILY AddressFamily,
  4194. IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
  4195. IN UINT SizeOfCmCharacteristics);
  4196. NDISAPI
  4197. VOID
  4198. NTAPI
  4199. NdisCmRegisterSapComplete(
  4200. IN NDIS_STATUS Status,
  4201. IN NDIS_HANDLE NdisSapHandle,
  4202. IN NDIS_HANDLE CallMgrSapContext);
  4203. NDISAPI
  4204. NDIS_STATUS
  4205. NTAPI
  4206. NdisMCmActivateVc(
  4207. IN NDIS_HANDLE NdisVcHandle,
  4208. IN PCO_CALL_PARAMETERS CallParameters);
  4209. NDISAPI
  4210. NDIS_STATUS
  4211. NTAPI
  4212. NdisMCmCreateVc(
  4213. IN NDIS_HANDLE MiniportAdapterHandle,
  4214. IN NDIS_HANDLE NdisAfHandle,
  4215. IN NDIS_HANDLE MiniportVcContext,
  4216. OUT PNDIS_HANDLE NdisVcHandle);
  4217. NDISAPI
  4218. NDIS_STATUS
  4219. NTAPI
  4220. NdisMCmDeactivateVc(
  4221. IN NDIS_HANDLE NdisVcHandle);
  4222. NDISAPI
  4223. NDIS_STATUS
  4224. NTAPI
  4225. NdisMCmDeleteVc(
  4226. IN NDIS_HANDLE NdisVcHandle);
  4227. NDISAPI
  4228. NDIS_STATUS
  4229. NTAPI
  4230. NdisMCmRegisterAddressFamily(
  4231. IN NDIS_HANDLE MiniportAdapterHandle,
  4232. IN PCO_ADDRESS_FAMILY AddressFamily,
  4233. IN PNDIS_CALL_MANAGER_CHARACTERISTICS CmCharacteristics,
  4234. IN UINT SizeOfCmCharacteristics);
  4235. NDISAPI
  4236. NDIS_STATUS
  4237. NTAPI
  4238. NdisMCmRequest(
  4239. IN NDIS_HANDLE NdisAfHandle,
  4240. IN NDIS_HANDLE NdisVcHandle OPTIONAL,
  4241. IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
  4242. IN OUT PNDIS_REQUEST NdisRequest);
  4243. /* Connection-oriented services */
  4244. NDISAPI
  4245. NDIS_STATUS
  4246. NTAPI
  4247. NdisCoCreateVc(
  4248. IN NDIS_HANDLE NdisBindingHandle,
  4249. IN NDIS_HANDLE NdisAfHandle OPTIONAL,
  4250. IN NDIS_HANDLE ProtocolVcContext,
  4251. IN OUT PNDIS_HANDLE NdisVcHandle);
  4252. NDISAPI
  4253. NDIS_STATUS
  4254. NTAPI
  4255. NdisCoDeleteVc(
  4256. IN NDIS_HANDLE NdisVcHandle);
  4257. NDISAPI
  4258. NDIS_STATUS
  4259. NTAPI
  4260. NdisCoRequest(
  4261. IN NDIS_HANDLE NdisBindingHandle,
  4262. IN NDIS_HANDLE NdisAfHandle OPTIONAL,
  4263. IN NDIS_HANDLE NdisVcHandle OPTIONAL,
  4264. IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
  4265. IN OUT PNDIS_REQUEST NdisRequest);
  4266. NDISAPI
  4267. VOID
  4268. NTAPI
  4269. NdisCoRequestComplete(
  4270. IN NDIS_STATUS Status,
  4271. IN NDIS_HANDLE NdisAfHandle,
  4272. IN NDIS_HANDLE NdisVcHandle OPTIONAL,
  4273. IN NDIS_HANDLE NdisPartyHandle OPTIONAL,
  4274. IN PNDIS_REQUEST NdisRequest);
  4275. NDISAPI
  4276. VOID
  4277. NTAPI
  4278. NdisCoSendPackets(
  4279. IN NDIS_HANDLE NdisVcHandle,
  4280. IN PPNDIS_PACKET PacketArray,
  4281. IN UINT NumberOfPackets);
  4282. NDISAPI
  4283. VOID
  4284. NTAPI
  4285. NdisMCoActivateVcComplete(
  4286. IN NDIS_STATUS Status,
  4287. IN NDIS_HANDLE NdisVcHandle,
  4288. IN PCO_CALL_PARAMETERS CallParameters);
  4289. NDISAPI
  4290. VOID
  4291. NTAPI
  4292. NdisMCoDeactivateVcComplete(
  4293. IN NDIS_STATUS Status,
  4294. IN NDIS_HANDLE NdisVcHandle);
  4295. NDISAPI
  4296. VOID
  4297. NTAPI
  4298. NdisMCoIndicateReceivePacket(
  4299. IN NDIS_HANDLE NdisVcHandle,
  4300. IN PPNDIS_PACKET PacketArray,
  4301. IN UINT NumberOfPackets);
  4302. NDISAPI
  4303. VOID
  4304. NTAPI
  4305. NdisMCoIndicateStatus(
  4306. IN NDIS_HANDLE MiniportAdapterHandle,
  4307. IN NDIS_HANDLE NdisVcHandle OPTIONAL,
  4308. IN NDIS_STATUS GeneralStatus,
  4309. IN PVOID StatusBuffer OPTIONAL,
  4310. IN ULONG StatusBufferSize);
  4311. NDISAPI
  4312. VOID
  4313. NTAPI
  4314. NdisMCoReceiveComplete(
  4315. IN NDIS_HANDLE MiniportAdapterHandle);
  4316. NDISAPI
  4317. VOID
  4318. NTAPI
  4319. NdisMCoRequestComplete(
  4320. IN NDIS_STATUS Status,
  4321. IN NDIS_HANDLE MiniportAdapterHandle,
  4322. IN PNDIS_REQUEST Request);
  4323. NDISAPI
  4324. VOID
  4325. NTAPI
  4326. NdisMCoSendComplete(
  4327. IN NDIS_STATUS Status,
  4328. IN NDIS_HANDLE NdisVcHandle,
  4329. IN PNDIS_PACKET Packet);
  4330. /* NDIS 5.0 extensions for intermediate drivers */
  4331. NDISAPI
  4332. VOID
  4333. NTAPI
  4334. NdisIMAssociateMiniport(
  4335. IN NDIS_HANDLE DriverHandle,
  4336. IN NDIS_HANDLE ProtocolHandle);
  4337. NDISAPI
  4338. NDIS_STATUS
  4339. NTAPI
  4340. NdisIMCancelInitializeDeviceInstance(
  4341. IN NDIS_HANDLE DriverHandle,
  4342. IN PNDIS_STRING DeviceInstance);
  4343. NDISAPI
  4344. VOID
  4345. NTAPI
  4346. NdisIMCopySendCompletePerPacketInfo(
  4347. IN PNDIS_PACKET DstPacket,
  4348. IN PNDIS_PACKET SrcPacket);
  4349. NDISAPI
  4350. VOID
  4351. NTAPI
  4352. NdisIMCopySendPerPacketInfo(
  4353. IN PNDIS_PACKET DstPacket,
  4354. IN PNDIS_PACKET SrcPacket);
  4355. NDISAPI
  4356. VOID
  4357. NTAPI
  4358. NdisIMDeregisterLayeredMiniport(
  4359. IN NDIS_HANDLE DriverHandle);
  4360. NDISAPI
  4361. NDIS_HANDLE
  4362. NTAPI
  4363. NdisIMGetBindingContext(
  4364. IN NDIS_HANDLE NdisBindingHandle);
  4365. NDISAPI
  4366. NDIS_HANDLE
  4367. NTAPI
  4368. NdisIMGetDeviceContext(
  4369. IN NDIS_HANDLE MiniportAdapterHandle);
  4370. NDISAPI
  4371. NDIS_STATUS
  4372. NTAPI
  4373. NdisIMInitializeDeviceInstanceEx(
  4374. IN NDIS_HANDLE DriverHandle,
  4375. IN PNDIS_STRING DriverInstance,
  4376. IN NDIS_HANDLE DeviceContext OPTIONAL);
  4377. /*
  4378. NDISAPI
  4379. PSINGLE_LIST_ENTRY
  4380. NTAPI
  4381. NdisInterlockedPopEntrySList(
  4382. IN PSLIST_HEADER ListHead,
  4383. IN PKSPIN_LOCK Lock);
  4384. */
  4385. #define NdisInterlockedPopEntrySList(SListHead, Lock) \
  4386. ExInterlockedPopEntrySList(SListHead, &(Lock)->SpinLock)
  4387. /*
  4388. NDISAPI
  4389. PSINGLE_LIST_ENTRY
  4390. NTAPI
  4391. NdisInterlockedPushEntrySList(
  4392. IN PSLIST_HEADER ListHead,
  4393. IN PSINGLE_LIST_ENTRY ListEntry,
  4394. IN PKSPIN_LOCK Lock);
  4395. */
  4396. #define NdisInterlockedPushEntrySList(SListHead, SListEntry, Lock) \
  4397. ExInterlockedPushEntrySList(SListHead, SListEntry, &(Lock)->SpinLock)
  4398. #define NdisInterlockedFlushSList(SListHead) ExInterlockedFlushSList(SListHead)
  4399. /*
  4400. NDISAPI
  4401. VOID
  4402. NTAPI
  4403. NdisQueryBufferSafe(
  4404. IN PNDIS_BUFFER Buffer,
  4405. OUT PVOID *VirtualAddress OPTIONAL,
  4406. OUT PUINT Length,
  4407. IN UINT Priority);
  4408. */
  4409. #define NdisQueryBufferSafe(_Buffer, _VirtualAddress, _Length, _Priority) { \
  4410. if (ARGUMENT_PRESENT(_VirtualAddress)) { \
  4411. *(PVOID *)(_VirtualAddress) = MmGetSystemAddressForMdlSafe(_Buffer, _Priority); \
  4412. } \
  4413. *(_Length) = MmGetMdlByteCount(_Buffer); \
  4414. }
  4415. /* Routines for NDIS miniport drivers */
  4416. #if NDIS_SUPPORT_NDIS6
  4417. NDISAPI
  4418. PNDIS_GENERIC_OBJECT
  4419. NTAPI
  4420. NdisAllocateGenericObject(
  4421. PDRIVER_OBJECT DriverObject OPTIONAL,
  4422. ULONG Tag,
  4423. USHORT Size);
  4424. NDISAPI
  4425. VOID
  4426. NTAPI
  4427. NdisFreeGenericObject(
  4428. IN PNDIS_GENERIC_OBJECT NdisObject);
  4429. #endif /* NDIS_SUPPORT_NDIS6 */
  4430. NDISAPI
  4431. VOID
  4432. NTAPI
  4433. NdisInitializeWrapper(
  4434. OUT PNDIS_HANDLE NdisWrapperHandle,
  4435. IN PVOID SystemSpecific1,
  4436. IN PVOID SystemSpecific2,
  4437. IN PVOID SystemSpecific3);
  4438. NDISAPI
  4439. NDIS_STATUS
  4440. NTAPI
  4441. NdisMAllocateMapRegisters(
  4442. IN NDIS_HANDLE MiniportAdapterHandle,
  4443. IN UINT DmaChannel,
  4444. IN NDIS_DMA_SIZE DmaSize,
  4445. IN ULONG PhysicalMapRegistersNeeded,
  4446. IN ULONG MaximumPhysicalMapping);
  4447. /*
  4448. * VOID
  4449. * NdisMArcIndicateReceive(
  4450. * IN NDIS_HANDLE MiniportAdapterHandle,
  4451. * IN PUCHAR HeaderBuffer,
  4452. * IN PUCHAR DataBuffer,
  4453. * IN UINT Length);
  4454. */
  4455. #define NdisMArcIndicateReceive(MiniportAdapterHandle, \
  4456. HeaderBuffer, \
  4457. DataBuffer, \
  4458. Length) \
  4459. { \
  4460. ArcFilterDprIndicateReceive( \
  4461. (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ArcDB), \
  4462. (HeaderBuffer), \
  4463. (DataBuffer), \
  4464. (Length)); \
  4465. }
  4466. /*
  4467. * VOID
  4468. * NdisMArcIndicateReceiveComplete(
  4469. * IN NDIS_HANDLE MiniportAdapterHandle);
  4470. */
  4471. #define NdisMArcIndicateReceiveComplete(MiniportAdapterHandle) \
  4472. { \
  4473. if (((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB) \
  4474. { \
  4475. NdisMEthIndicateReceiveComplete(_H); \
  4476. } \
  4477. \
  4478. ArcFilterDprIndicateReceiveComplete( \
  4479. ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->ArcDB); \
  4480. }
  4481. NDISAPI
  4482. VOID
  4483. NTAPI
  4484. NdisMCloseLog(
  4485. IN NDIS_HANDLE LogHandle);
  4486. NDISAPI
  4487. NDIS_STATUS
  4488. NTAPI
  4489. NdisMCreateLog(
  4490. IN NDIS_HANDLE MiniportAdapterHandle,
  4491. IN UINT Size,
  4492. OUT PNDIS_HANDLE LogHandle);
  4493. NDISAPI
  4494. VOID
  4495. NTAPI
  4496. NdisMDeregisterAdapterShutdownHandler(
  4497. IN NDIS_HANDLE MiniportHandle);
  4498. #if NDIS_LEGACY_MINIPORT
  4499. NDISAPI
  4500. VOID
  4501. NTAPI
  4502. NdisMDeregisterInterrupt(
  4503. IN PNDIS_MINIPORT_INTERRUPT Interrupt);
  4504. NDISAPI
  4505. VOID
  4506. NTAPI
  4507. NdisMRegisterAdapterShutdownHandler(
  4508. IN NDIS_HANDLE MiniportHandle,
  4509. IN PVOID ShutdownContext,
  4510. IN ADAPTER_SHUTDOWN_HANDLER ShutdownHandler);
  4511. NDISAPI
  4512. NDIS_STATUS
  4513. NTAPI
  4514. NdisMRegisterInterrupt(
  4515. OUT PNDIS_MINIPORT_INTERRUPT Interrupt,
  4516. IN NDIS_HANDLE MiniportAdapterHandle,
  4517. IN UINT InterruptVector,
  4518. IN UINT InterruptLevel,
  4519. IN BOOLEAN RequestIsr,
  4520. IN BOOLEAN SharedInterrupt,
  4521. IN NDIS_INTERRUPT_MODE InterruptMode);
  4522. NDISAPI
  4523. NDIS_STATUS
  4524. NTAPI
  4525. NdisMRegisterMiniport(
  4526. IN NDIS_HANDLE NdisWrapperHandle,
  4527. IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
  4528. IN UINT CharacteristicsLength);
  4529. NDISAPI
  4530. BOOLEAN
  4531. NTAPI
  4532. NdisMSynchronizeWithInterrupt(
  4533. IN PNDIS_MINIPORT_INTERRUPT Interrupt,
  4534. IN PVOID SynchronizeFunction,
  4535. IN PVOID SynchronizeContext);
  4536. #endif /* NDIS_LEGACY_MINIPORT */
  4537. NDISAPI
  4538. VOID
  4539. NTAPI
  4540. NdisMDeregisterIoPortRange(
  4541. IN NDIS_HANDLE MiniportAdapterHandle,
  4542. IN UINT InitialPort,
  4543. IN UINT NumberOfPorts,
  4544. IN PVOID PortOffset);
  4545. /*
  4546. * VOID
  4547. * NdisMEthIndicateReceive(
  4548. * IN NDIS_HANDLE MiniportAdapterHandle,
  4549. * IN NDIS_HANDLE MiniportReceiveContext,
  4550. * IN PVOID HeaderBuffer,
  4551. * IN UINT HeaderBufferSize,
  4552. * IN PVOID LookaheadBuffer,
  4553. * IN UINT LookaheadBufferSize,
  4554. * IN UINT PacketSize);
  4555. */
  4556. #define NdisMEthIndicateReceive(MiniportAdapterHandle, \
  4557. MiniportReceiveContext, \
  4558. HeaderBuffer, \
  4559. HeaderBufferSize, \
  4560. LookaheadBuffer, \
  4561. LookaheadBufferSize, \
  4562. PacketSize) \
  4563. { \
  4564. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxIndicateHandler)( \
  4565. ((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthDB, \
  4566. (MiniportReceiveContext), \
  4567. (HeaderBuffer), \
  4568. (HeaderBuffer), \
  4569. (HeaderBufferSize), \
  4570. (LookaheadBuffer), \
  4571. (LookaheadBufferSize), \
  4572. (PacketSize)); \
  4573. }
  4574. /*
  4575. * VOID
  4576. * NdisMEthIndicateReceiveComplete(
  4577. * IN NDIS_HANDLE MiniportAdapterHandle);
  4578. */
  4579. #define NdisMEthIndicateReceiveComplete(MiniportAdapterHandle) \
  4580. { \
  4581. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->EthRxCompleteHandler)( \
  4582. ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->EthDB); \
  4583. }
  4584. /*
  4585. * VOID
  4586. * NdisMFddiIndicateReceive(
  4587. * IN NDIS_HANDLE MiniportAdapterHandle,
  4588. * IN NDIS_HANDLE MiniportReceiveContext,
  4589. * IN PVOID HeaderBuffer,
  4590. * IN UINT HeaderBufferSize,
  4591. * IN PVOID LookaheadBuffer,
  4592. * IN UINT LookaheadBufferSize,
  4593. * IN UINT PacketSize);
  4594. */
  4595. #define NdisMFddiIndicateReceive(MiniportAdapterHandle, \
  4596. MiniportReceiveContext, \
  4597. HeaderBuffer, \
  4598. HeaderBufferSize, \
  4599. LookaheadBuffer, \
  4600. LookaheadBufferSize, \
  4601. PacketSize) \
  4602. { \
  4603. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxIndicateHandler)( \
  4604. (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiDB), \
  4605. (MiniportReceiveContext), \
  4606. (PUCHAR)(HeaderBuffer) + 1, \
  4607. (((*(PUCHAR*)(HeaderBuffer)) & 0x40) ? \
  4608. FDDI_LENGTH_OF_LONG_ADDRESS : \
  4609. FDDI_LENGTH_OF_SHORT_ADDRESS), \
  4610. (HeaderBuffer), \
  4611. (HeaderBufferSize), \
  4612. (LookaheadBuffer), \
  4613. (LookaheadBufferSize), \
  4614. (PacketSize)); \
  4615. }
  4616. /*
  4617. * VOID
  4618. * NdisMFddiIndicateReceiveComplete(
  4619. * IN NDIS_HANDLE MiniportAdapterHandle);
  4620. */
  4621. #define NdisMFddiIndicateReceiveComplete(MiniportAdapterHandle) \
  4622. { \
  4623. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->FddiRxCompleteHandler)( \
  4624. ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->FddiDB); \
  4625. }
  4626. NDISAPI
  4627. VOID
  4628. NTAPI
  4629. NdisMFlushLog(
  4630. IN NDIS_HANDLE LogHandle);
  4631. NDISAPI
  4632. VOID
  4633. NTAPI
  4634. NdisMFreeMapRegisters(
  4635. IN NDIS_HANDLE MiniportAdapterHandle);
  4636. /*
  4637. * VOID
  4638. * EXPORT
  4639. * NdisMIndicateReceivePacket(
  4640. * IN NDIS_HANDLE MiniportAdapterHandle,
  4641. * IN PPNDIS_PACKET ReceivePackets,
  4642. * IN UINT NumberOfPackets);
  4643. */
  4644. #define NdisMIndicateReceivePacket(MiniportAdapterHandle, \
  4645. ReceivePackets, NumberOfPackets) \
  4646. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->PacketIndicateHandler)( \
  4647. MiniportAdapterHandle, ReceivePackets, NumberOfPackets)
  4648. /*
  4649. * VOID
  4650. * NdisMIndicateStatus(
  4651. * IN NDIS_HANDLE MiniportAdapterHandle,
  4652. * IN NDIS_STATUS GeneralStatus,
  4653. * IN PVOID StatusBuffer,
  4654. * IN UINT StatusBufferSize);
  4655. */
  4656. #define NdisMIndicateStatus(MiniportAdapterHandle, \
  4657. GeneralStatus, StatusBuffer, StatusBufferSize) \
  4658. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusHandler)( \
  4659. MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
  4660. /*
  4661. * VOID
  4662. * NdisMIndicateStatusComplete(
  4663. * IN NDIS_HANDLE MiniportAdapterHandle);
  4664. */
  4665. #define NdisMIndicateStatusComplete(MiniportAdapterHandle) \
  4666. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->StatusCompleteHandler)( \
  4667. MiniportAdapterHandle)
  4668. /*
  4669. * VOID
  4670. * NdisMInitializeWrapper(
  4671. * OUT PNDIS_HANDLE NdisWrapperHandle,
  4672. * IN PVOID SystemSpecific1,
  4673. * IN PVOID SystemSpecific2,
  4674. * IN PVOID SystemSpecific3);
  4675. */
  4676. #define NdisMInitializeWrapper(NdisWrapperHandle, \
  4677. SystemSpecific1, \
  4678. SystemSpecific2, \
  4679. SystemSpecific3) \
  4680. NdisInitializeWrapper((NdisWrapperHandle), \
  4681. (SystemSpecific1), \
  4682. (SystemSpecific2), \
  4683. (SystemSpecific3))
  4684. NDISAPI
  4685. NDIS_STATUS
  4686. NTAPI
  4687. NdisMMapIoSpace(
  4688. OUT PVOID *VirtualAddress,
  4689. IN NDIS_HANDLE MiniportAdapterHandle,
  4690. IN NDIS_PHYSICAL_ADDRESS PhysicalAddress,
  4691. IN UINT Length);
  4692. /*
  4693. * VOID
  4694. * NdisMQueryInformationComplete(
  4695. * IN NDIS_HANDLE MiniportAdapterHandle,
  4696. * IN NDIS_STATUS Status);
  4697. */
  4698. #define NdisMQueryInformationComplete(MiniportAdapterHandle, Status) \
  4699. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->QueryCompleteHandler)(MiniportAdapterHandle, Status)
  4700. NDISAPI
  4701. NDIS_STATUS
  4702. NTAPI
  4703. NdisMRegisterIoPortRange(
  4704. OUT PVOID *PortOffset,
  4705. IN NDIS_HANDLE MiniportAdapterHandle,
  4706. IN UINT InitialPort,
  4707. IN UINT NumberOfPorts);
  4708. NDISAPI
  4709. VOID
  4710. NTAPI
  4711. NdisMSetTimer(
  4712. IN PNDIS_MINIPORT_TIMER Timer,
  4713. IN UINT MillisecondsToDelay);
  4714. NDISAPI
  4715. VOID
  4716. NTAPI
  4717. NdisMInitializeTimer(
  4718. IN OUT PNDIS_MINIPORT_TIMER Timer,
  4719. IN NDIS_HANDLE MiniportAdapterHandle,
  4720. IN PNDIS_TIMER_FUNCTION TimerFunction,
  4721. IN PVOID FunctionContext);
  4722. NDISAPI
  4723. VOID
  4724. NTAPI
  4725. NdisMSetPeriodicTimer(
  4726. IN PNDIS_MINIPORT_TIMER Timer,
  4727. IN UINT MillisecondPeriod);
  4728. NDISAPI
  4729. VOID
  4730. NTAPI
  4731. NdisMCancelTimer(
  4732. IN PNDIS_MINIPORT_TIMER Timer,
  4733. OUT PBOOLEAN TimerCancelled);
  4734. #if !defined(NDIS_WRAPPER)
  4735. /*
  4736. * VOID
  4737. * NdisMResetComplete(
  4738. * IN NDIS_HANDLE MiniportAdapterHandle,
  4739. * IN NDIS_STATUS Status,
  4740. * IN BOOLEAN AddressingReset);
  4741. */
  4742. #define NdisMResetComplete(MiniportAdapterHandle, \
  4743. Status, \
  4744. AddressingReset) \
  4745. { \
  4746. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->ResetCompleteHandler)( \
  4747. MiniportAdapterHandle, Status, AddressingReset); \
  4748. }
  4749. /*
  4750. * VOID
  4751. * NdisMSendComplete(
  4752. * IN NDIS_HANDLE MiniportAdapterHandle,
  4753. * IN PNDIS_PACKET Packet,
  4754. * IN NDIS_STATUS Status);
  4755. */
  4756. #define NdisMSendComplete(MiniportAdapterHandle, \
  4757. Packet, \
  4758. Status) \
  4759. { \
  4760. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendCompleteHandler)( \
  4761. MiniportAdapterHandle, Packet, Status); \
  4762. }
  4763. /*
  4764. * VOID
  4765. * NdisMSendResourcesAvailable(
  4766. * IN NDIS_HANDLE MiniportAdapterHandle);
  4767. */
  4768. #define NdisMSendResourcesAvailable(MiniportAdapterHandle) \
  4769. { \
  4770. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SendResourcesHandler)( \
  4771. MiniportAdapterHandle); \
  4772. }
  4773. /*
  4774. * VOID
  4775. * NdisMTransferDataComplete(
  4776. * IN NDIS_HANDLE MiniportAdapterHandle,
  4777. * IN PNDIS_PACKET Packet,
  4778. * IN NDIS_STATUS Status,
  4779. * IN UINT BytesTransferred);
  4780. */
  4781. #define NdisMTransferDataComplete(MiniportAdapterHandle, \
  4782. Packet, \
  4783. Status, \
  4784. BytesTransferred) \
  4785. { \
  4786. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TDCompleteHandler)( \
  4787. MiniportAdapterHandle, Packet, Status, BytesTransferred) \
  4788. }
  4789. #endif /* !_NDIS_ */
  4790. /*
  4791. * VOID
  4792. * NdisMSetAttributes(
  4793. * IN NDIS_HANDLE MiniportAdapterHandle,
  4794. * IN NDIS_HANDLE MiniportAdapterContext,
  4795. * IN BOOLEAN BusMaster,
  4796. * IN NDIS_INTERFACE_TYPE AdapterType);
  4797. */
  4798. #define NdisMSetAttributes(MiniportAdapterHandle, \
  4799. MiniportAdapterContext, \
  4800. BusMaster, \
  4801. AdapterType) \
  4802. NdisMSetAttributesEx(MiniportAdapterHandle, \
  4803. MiniportAdapterContext, \
  4804. 0, \
  4805. (BusMaster) ? NDIS_ATTRIBUTE_BUS_MASTER : 0, \
  4806. AdapterType)
  4807. NDISAPI
  4808. VOID
  4809. NTAPI
  4810. NdisMSetAttributesEx(
  4811. IN NDIS_HANDLE MiniportAdapterHandle,
  4812. IN NDIS_HANDLE MiniportAdapterContext,
  4813. IN UINT CheckForHangTimeInSeconds OPTIONAL,
  4814. IN ULONG AttributeFlags,
  4815. IN NDIS_INTERFACE_TYPE AdapterType);
  4816. /*
  4817. * VOID
  4818. * NdisMSetInformationComplete(
  4819. * IN NDIS_HANDLE MiniportAdapterHandle,
  4820. * IN NDIS_STATUS Status);
  4821. */
  4822. #define NdisMSetInformationComplete(MiniportAdapterHandle, \
  4823. Status) \
  4824. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)( \
  4825. MiniportAdapterHandle, Status)
  4826. NDISAPI
  4827. VOID
  4828. NTAPI
  4829. NdisMSleep(
  4830. IN ULONG MicrosecondsToSleep);
  4831. /*
  4832. * VOID
  4833. * NdisMTrIndicateReceive(
  4834. * IN NDIS_HANDLE MiniportAdapterHandle,
  4835. * IN NDIS_HANDLE MiniportReceiveContext,
  4836. * IN PVOID HeaderBuffer,
  4837. * IN UINT HeaderBufferSize,
  4838. * IN PVOID LookaheadBuffer,
  4839. * IN UINT LookaheadBufferSize,
  4840. * IN UINT PacketSize);
  4841. */
  4842. #define NdisMTrIndicateReceive(MiniportAdapterHandle, \
  4843. MiniportReceiveContext, \
  4844. HeaderBuffer, \
  4845. HeaderBufferSize, \
  4846. LookaheadBuffer, \
  4847. LookaheadBufferSize, \
  4848. PacketSize) \
  4849. { \
  4850. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxIndicateHandler)( \
  4851. (((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrDB), \
  4852. (MiniportReceiveContext), \
  4853. (HeaderBuffer), \
  4854. (HeaderBuffer), \
  4855. (HeaderBufferSize), \
  4856. (LookaheadBuffer), \
  4857. (LookaheadBufferSize), \
  4858. (PacketSize)); \
  4859. }
  4860. /*
  4861. * VOID
  4862. * NdisMTrIndicateReceiveComplete(
  4863. * IN NDIS_HANDLE MiniportAdapterHandle);
  4864. */
  4865. #define NdisMTrIndicateReceiveComplete(MiniportAdapterHandle) \
  4866. { \
  4867. (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->TrRxCompleteHandler)( \
  4868. ((PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle)->TrDB); \
  4869. }
  4870. NDISAPI
  4871. NDIS_STATUS
  4872. NTAPI
  4873. NdisMWriteLogData(
  4874. IN NDIS_HANDLE LogHandle,
  4875. IN PVOID LogBuffer,
  4876. IN UINT LogBufferSize);
  4877. NDISAPI
  4878. VOID
  4879. NTAPI
  4880. NdisMQueryAdapterResources(
  4881. OUT PNDIS_STATUS Status,
  4882. IN NDIS_HANDLE WrapperConfigurationContext,
  4883. OUT PNDIS_RESOURCE_LIST ResourceList,
  4884. IN OUT PUINT BufferSize);
  4885. NDISAPI
  4886. VOID
  4887. NTAPI
  4888. NdisTerminateWrapper(
  4889. IN NDIS_HANDLE NdisWrapperHandle,
  4890. IN PVOID SystemSpecific);
  4891. NDISAPI
  4892. VOID
  4893. NTAPI
  4894. NdisMUnmapIoSpace(
  4895. IN NDIS_HANDLE MiniportAdapterHandle,
  4896. IN PVOID VirtualAddress,
  4897. IN UINT Length);
  4898. /* Event functions */
  4899. NDISAPI
  4900. VOID
  4901. NTAPI
  4902. NdisInitializeEvent(
  4903. OUT PNDIS_EVENT Event);
  4904. NDISAPI
  4905. VOID
  4906. NTAPI
  4907. NdisSetEvent(
  4908. IN PNDIS_EVENT Event);
  4909. NDISAPI
  4910. VOID
  4911. NTAPI
  4912. NdisResetEvent(
  4913. IN PNDIS_EVENT Event);
  4914. NDISAPI
  4915. BOOLEAN
  4916. NTAPI
  4917. NdisWaitEvent(
  4918. IN PNDIS_EVENT Event,
  4919. IN UINT MsToWait);
  4920. /* NDIS intermediate miniport structures */
  4921. typedef VOID (NTAPI *W_MINIPORT_CALLBACK)(
  4922. IN NDIS_HANDLE MiniportAdapterContext,
  4923. IN PVOID CallbackContext);
  4924. /* Routines for intermediate miniport drivers */
  4925. NDISAPI
  4926. NDIS_STATUS
  4927. NTAPI
  4928. NdisIMDeInitializeDeviceInstance(
  4929. IN NDIS_HANDLE NdisMiniportHandle);
  4930. /*
  4931. * NDIS_STATUS
  4932. * NdisIMInitializeDeviceInstance(
  4933. * IN NDIS_HANDLE DriverHandle,
  4934. * IN PNDIS_STRING DeviceInstance);
  4935. */
  4936. #define NdisIMInitializeDeviceInstance(DriverHandle, DeviceInstance) \
  4937. NdisIMInitializeDeviceInstanceEx(DriverHandle, DeviceInstance, NULL)
  4938. /* Functions obsoleted by NDIS 5.0 */
  4939. NDISAPI
  4940. VOID
  4941. NTAPI
  4942. NdisFreeDmaChannel(
  4943. IN PNDIS_HANDLE NdisDmaHandle);
  4944. NDISAPI
  4945. VOID
  4946. NTAPI
  4947. NdisSetupDmaTransfer(
  4948. OUT PNDIS_STATUS Status,
  4949. IN PNDIS_HANDLE NdisDmaHandle,
  4950. IN PNDIS_BUFFER Buffer,
  4951. IN ULONG Offset,
  4952. IN ULONG Length,
  4953. IN BOOLEAN WriteToDevice);
  4954. /*
  4955. NDISAPI
  4956. NTSTATUS
  4957. NTAPI
  4958. NdisUpcaseUnicodeString(
  4959. OUT PUNICODE_STRING DestinationString,
  4960. IN PUNICODE_STRING SourceString);
  4961. */
  4962. #define NdisUpcaseUnicodeString(_d, _s) RtlUpcaseUnicodeString(_d, _s, FALSE)
  4963. /* Routines for NDIS protocol drivers */
  4964. #if NDIS_LEGACY_PROTOCOL
  4965. NDISAPI
  4966. NDIS_STATUS
  4967. NTAPI
  4968. NdisIMRegisterLayeredMiniport(
  4969. IN NDIS_HANDLE NdisWrapperHandle,
  4970. IN PNDIS_MINIPORT_CHARACTERISTICS MiniportCharacteristics,
  4971. IN UINT CharacteristicsLength,
  4972. OUT PNDIS_HANDLE DriverHandle);
  4973. NDISAPI
  4974. VOID
  4975. NTAPI
  4976. NdisTransferData(
  4977. OUT PNDIS_STATUS Status,
  4978. IN NDIS_HANDLE NdisBindingHandle,
  4979. IN NDIS_HANDLE MacReceiveContext,
  4980. IN UINT ByteOffset,
  4981. IN UINT BytesToTransfer,
  4982. IN OUT PNDIS_PACKET Packet,
  4983. OUT PUINT BytesTransferred);
  4984. NDISAPI
  4985. VOID
  4986. NTAPI
  4987. NdisSend(
  4988. OUT PNDIS_STATUS Status,
  4989. IN NDIS_HANDLE NdisBindingHandle,
  4990. IN PNDIS_PACKET Packet);
  4991. NDISAPI
  4992. VOID
  4993. NTAPI
  4994. NdisSendPackets(
  4995. IN NDIS_HANDLE NdisBindingHandle,
  4996. IN PPNDIS_PACKET PacketArray,
  4997. IN UINT NumberOfPackets);
  4998. NDISAPI
  4999. VOID
  5000. NTAPI
  5001. NdisRequest(
  5002. OUT PNDIS_STATUS Status,
  5003. IN NDIS_HANDLE NdisBindingHandle,
  5004. IN PNDIS_REQUEST NdisRequest);
  5005. NDISAPI
  5006. VOID
  5007. NTAPI
  5008. NdisReset(
  5009. OUT PNDIS_STATUS Status,
  5010. IN NDIS_HANDLE NdisBindingHandle);
  5011. NDISAPI
  5012. VOID
  5013. NTAPI
  5014. NdisDeregisterProtocol(
  5015. OUT PNDIS_STATUS Status,
  5016. IN NDIS_HANDLE NdisProtocolHandle);
  5017. NDISAPI
  5018. VOID
  5019. NTAPI
  5020. NdisOpenAdapter(
  5021. OUT PNDIS_STATUS Status,
  5022. OUT PNDIS_STATUS OpenErrorStatus,
  5023. OUT PNDIS_HANDLE NdisBindingHandle,
  5024. OUT PUINT SelectedMediumIndex,
  5025. IN PNDIS_MEDIUM MediumArray,
  5026. IN UINT MediumArraySize,
  5027. IN NDIS_HANDLE NdisProtocolHandle,
  5028. IN NDIS_HANDLE ProtocolBindingContext,
  5029. IN PNDIS_STRING AdapterName,
  5030. IN UINT OpenOptions,
  5031. IN PSTRING AddressingInformation OPTIONAL);
  5032. NDISAPI
  5033. VOID
  5034. NTAPI
  5035. NdisCloseAdapter(
  5036. OUT PNDIS_STATUS Status,
  5037. IN NDIS_HANDLE NdisBindingHandle);
  5038. NDISAPI
  5039. VOID
  5040. NTAPI
  5041. NdisCompleteBindAdapter(
  5042. IN NDIS_HANDLE BindAdapterContext,
  5043. IN NDIS_STATUS Status,
  5044. IN NDIS_STATUS OpenStatus);
  5045. NDISAPI
  5046. VOID
  5047. NTAPI
  5048. NdisCompleteUnbindAdapter(
  5049. IN NDIS_HANDLE UnbindAdapterContext,
  5050. IN NDIS_STATUS Status);
  5051. NDISAPI
  5052. VOID
  5053. NTAPI
  5054. NdisSetProtocolFilter(
  5055. OUT PNDIS_STATUS Status,
  5056. IN NDIS_HANDLE NdisBindingHandle,
  5057. IN RECEIVE_HANDLER ReceiveHandler,
  5058. IN RECEIVE_PACKET_HANDLER ReceivePacketHandler,
  5059. IN NDIS_MEDIUM Medium,
  5060. IN UINT Offset,
  5061. IN UINT Size,
  5062. IN PUCHAR Pattern);
  5063. NDISAPI
  5064. VOID
  5065. NTAPI
  5066. NdisGetDriverHandle(
  5067. IN PNDIS_HANDLE NdisBindingHandle,
  5068. OUT PNDIS_HANDLE NdisDriverHandle);
  5069. NDISAPI
  5070. VOID
  5071. NTAPI
  5072. NdisOpenProtocolConfiguration(
  5073. OUT PNDIS_STATUS Status,
  5074. OUT PNDIS_HANDLE ConfigurationHandle,
  5075. IN PNDIS_STRING ProtocolSection);
  5076. NDISAPI
  5077. VOID
  5078. NTAPI
  5079. NdisCompletePnPEvent(
  5080. IN NDIS_STATUS Status,
  5081. IN NDIS_HANDLE NdisBindingHandle,
  5082. IN PNET_PNP_EVENT NetPnPEvent);
  5083. /*
  5084. * VOID
  5085. * NdisSetSendFlags(
  5086. * IN PNDIS_PACKET Packet,
  5087. * IN UINT Flags);
  5088. */
  5089. #define NdisSetSendFlags(_Packet,_Flags)(_Packet)->Private.Flags = (_Flags)
  5090. #define NdisQuerySendFlags(_Packet,_Flags) *(_Flags) = (_Packet)->Private.Flags
  5091. NDISAPI
  5092. VOID
  5093. NTAPI
  5094. NdisReturnPackets(
  5095. IN PNDIS_PACKET *PacketsToReturn,
  5096. IN UINT NumberOfPackets);
  5097. NDISAPI
  5098. PNDIS_PACKET
  5099. NTAPI
  5100. NdisGetReceivedPacket(
  5101. IN PNDIS_HANDLE NdisBindingHandle,
  5102. IN PNDIS_HANDLE MacContext);
  5103. NDISAPI
  5104. VOID
  5105. NTAPI
  5106. NdisCancelSendPackets(
  5107. IN NDIS_HANDLE NdisBindingHandle,
  5108. IN PVOID CancelId);
  5109. NDISAPI
  5110. NDIS_STATUS
  5111. NTAPI
  5112. NdisQueryPendingIOCount(
  5113. IN PVOID NdisBindingHandle,
  5114. OUT PULONG IoCount);
  5115. NDISAPI
  5116. VOID
  5117. NTAPI
  5118. NdisRegisterProtocol(
  5119. OUT PNDIS_STATUS Status,
  5120. OUT PNDIS_HANDLE NdisProtocolHandle,
  5121. IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics,
  5122. IN UINT CharacteristicsLength);
  5123. #endif /* NDIS_LEGACY_PROTOCOL */
  5124. NDISAPI
  5125. UCHAR
  5126. NTAPI
  5127. NdisGeneratePartialCancelId(VOID);
  5128. NDISAPI
  5129. VOID
  5130. NTAPI
  5131. NdisReEnumerateProtocolBindings(
  5132. IN NDIS_HANDLE NdisProtocolHandle);
  5133. NDISAPI
  5134. VOID
  5135. NTAPI
  5136. NdisRegisterTdiCallBack(
  5137. IN TDI_REGISTER_CALLBACK RegisterCallback,
  5138. IN TDI_PNP_HANDLER PnPHandler);
  5139. NDISAPI
  5140. VOID
  5141. NTAPI
  5142. NdisDeregisterTdiCallBack(VOID);
  5143. /* Obsoleted in Windows XP */
  5144. /* Prototypes for NDIS_MAC_CHARACTERISTICS */
  5145. typedef NDIS_STATUS (*OPEN_ADAPTER_HANDLER)(
  5146. OUT PNDIS_STATUS OpenErrorStatus,
  5147. OUT NDIS_HANDLE *MacBindingHandle,
  5148. OUT PUINT SelectedMediumIndex,
  5149. IN PNDIS_MEDIUM MediumArray,
  5150. IN UINT MediumArraySize,
  5151. IN NDIS_HANDLE NdisBindingContext,
  5152. IN NDIS_HANDLE MacAdapterContext,
  5153. IN UINT OpenOptions,
  5154. IN PSTRING AddressingInformation OPTIONAL);
  5155. typedef NDIS_STATUS (NTAPI *CLOSE_ADAPTER_HANDLER)(
  5156. IN NDIS_HANDLE MacBindingHandle);
  5157. typedef NDIS_STATUS (NTAPI *WAN_TRANSFER_DATA_HANDLER)(
  5158. VOID);
  5159. typedef NDIS_STATUS (NTAPI *QUERY_GLOBAL_STATISTICS_HANDLER)(
  5160. IN NDIS_HANDLE MacAdapterContext,
  5161. IN PNDIS_REQUEST NdisRequest);
  5162. typedef VOID (NTAPI *UNLOAD_MAC_HANDLER)(
  5163. IN NDIS_HANDLE MacMacContext);
  5164. typedef NDIS_STATUS (NTAPI *ADD_ADAPTER_HANDLER)(
  5165. IN NDIS_HANDLE MacMacContext,
  5166. IN NDIS_HANDLE WrapperConfigurationContext,
  5167. IN PNDIS_STRING AdapterName);
  5168. typedef VOID (*REMOVE_ADAPTER_HANDLER)(
  5169. IN NDIS_HANDLE MacAdapterContext);
  5170. typedef struct _NDIS_MAC_CHARACTERISTICS {
  5171. UCHAR MajorNdisVersion;
  5172. UCHAR MinorNdisVersion;
  5173. USHORT Filler;
  5174. UINT Reserved;
  5175. OPEN_ADAPTER_HANDLER OpenAdapterHandler;
  5176. CLOSE_ADAPTER_HANDLER CloseAdapterHandler;
  5177. SEND_HANDLER SendHandler;
  5178. TRANSFER_DATA_HANDLER TransferDataHandler;
  5179. RESET_HANDLER ResetHandler;
  5180. REQUEST_HANDLER RequestHandler;
  5181. QUERY_GLOBAL_STATISTICS_HANDLER QueryGlobalStatisticsHandler;
  5182. UNLOAD_MAC_HANDLER UnloadMacHandler;
  5183. ADD_ADAPTER_HANDLER AddAdapterHandler;
  5184. REMOVE_ADAPTER_HANDLER RemoveAdapterHandler;
  5185. NDIS_STRING Name;
  5186. } NDIS_MAC_CHARACTERISTICS, *PNDIS_MAC_CHARACTERISTICS;
  5187. typedef NDIS_MAC_CHARACTERISTICS NDIS_WAN_MAC_CHARACTERISTICS;
  5188. typedef NDIS_WAN_MAC_CHARACTERISTICS *PNDIS_WAN_MAC_CHARACTERISTICS;
  5189. #ifdef __cplusplus
  5190. }
  5191. #endif
  5192. #endif /* _NDIS_ */
  5193. /* EOF */