|
|
1.1 root 1: ;============================================================================
2: ;============================================================================
3: ;
4: ; NCPARAM.INF Netcard Detection Parameter handling routines
5: ;
6: ;============================================================================
7: ; SECTION 1: Overview and description of variables.
8: ;============================================================================
9: ;
10: ; This file is "shelled" to by OEMNxxyy.INF files to facilitate
11: ; and generalize the handling of netcard detection, defaulted
12: ; and detected parameter handling and parameter verification.
13: ;
14: ; These routines are based upon several precursors. This section
15: ; documents all key information about netcard detection and
16: ; the requirements necessary to use the routines in this file.
17: ;
18: ; 1) The document NCDETECT.DOC describes the detection
19: ; driver, DLLs and the interfaces provided by them.
20: ;
21: ; 2) Netcard detection DLLs are registered in the Registry
22: ; under HKEY_LOCAL_MACHINE\System\Setup, NetcardDlls,
23: ; which is a REG_MULTI_SZ. The standard Microsoft DLL,
24: ; MSNCDET.DLL, should be first in this list.
25: ;
26: ; 3) The netcard detection driver, NETDTECT.SYS, is installed
27: ; as the NETDETECT service. he driver interface DLL,
28: ; NETDTECT.DLL, interfaces to the driver.
29: ;
30: ; 4) The file NETDTECT.INF installs the NETDETECT service
31: ; and updates the "NetcardDlls" value. In other words,
32: ; it performs steps 3 and 4 above.
33: ;
34: ; The files MSNCDET.DLL, NETDETCT.DLL and NETDETCT.SYS
35: ; must be in the minimum boot tree during main installation.
36: ;
37: ; 5) During main installation, NTLANMAN.INF shells to NETDTECT.INF
38: ; to install the NETDETECT service, which it then starts.
39: ;
40: ; 6) During main installation, NTLANMAN.INF shells to OEMHOOK.INF
41: ; so that additional OEM netcard detection DLLs can be
42: ; properly registred.
43: ;
44: ; 7) NCPA.CPL exports wrapper functions through the generic
45: ; SETUP-to-NCPA function CPlSetup(). These functions are:
46: ;
47: ; DTSTART Activate the NETDETECT service
48: ; and instantiate the C++ objects
49: ; required for support of detection.
50: ;
51: ; DTEND Stop detection and discard the objects.
52: ; The NETDETECT service is not stopped.
53: ;
54: ; DTRESET Reset enumeration across buses, etc.
55: ; Also discards all previous detected
56: ; netcard information.
57: ;
58: ; DTPARAMS Return netcard parameter information about
59: ; a particular netcard option.
60: ;
61: ; DTCARD Attempt to detect a card. This is a
62: ; first-next enumeration routine. After
63: ; it reports failure, it calls DTRESET
64: ; internally to restart enumeration. If
65: ; successful, it returns the option name
66: ; of the detected card and a numeric
67: ; index representing the card.
68: ;
69: ; DTQUERY Return detected parameters from a netcard
70: ; reported by DTCARD.
71: ;
72: ; DTVERIFY Validate chosen netcard parameteres for a
73: ; netcard reported by DTCARD.
74: ;
75: ;
76: ; 8) Several new global INF variables are used for netcard
77: ; detection:
78: ;
79: ; STF_NCDETECT = {YES|NO}
80: ;
81: ; This controls the use of detection in
82: ; NTLANMAN.INF and all other INFs. If
83: ; "NO", no use of the detection
84: ; services is made.
85: ;
86: ; STF_INSTALL_MODE = {CUSTOM|EXPRESS}
87: ;
88: ; This is not new a new variable, but is
89: ; a key factor in the UI presented.
90: ;
91: ; STF_NCDETCARD = 0,1,2, etc.
92: ;
93: ; This is an integer representing a
94: ; detected card. The actual structures
95: ; are maintained by ncpa!CPlSetup().
96: ;
97: ; STF_NCOPTION = OPTIONNAME (e.g., DE201)
98: ;
99: ; This is the name of the netcard option
100: ; which has been detected.
101: ;
102: ; STF_NCDETINFO = INF list containing data about the
103: ; detected card; it has the form:
104: ;
105: ; { OPTIONNAME,
106: ; <card index>,
107: ; <numeric card type>,
108: ; <detection confidence level>,
109: ; <bus interface type>,
110: ; <bus number>
111: ; }
112: ;
113: ; All values except OPTIONNAME are numeric.
114: ; See NCDETECT.DOC for further details.
115: ;
116: ; STF_NC_PARAMS = INF list describing netcard parameters; it has
117: ; the form:
118: ;
119: ; { {PARAMETER_1_NAME,
120: ; <setting control>,
121: ; <confidence>,
122: ; {v1,v2,v3,...} },
123: ; {PARAMETER_2_NAME,
124: ; <setting control>,
125: ; <confidence>,
126: ; {v1,v2,v3,...} },
127: ; ...
128: ; }
129: ;
130: ; where PARAMETER_1_NAME might be IRQ;
131: ; <setting control> determines whether the
132: ; parameter is controllable through software;
133: ; <confidence> is a number [0..100] representing
134: ; the confidence with which the parameter can
135: ; be detected. The nested list {v1,v2...}
136: ; enumerates the possible numeric settings
137: ; which the parameter can take.
138: ;
139: ; Each netcard INF must create this list
140: ; and populate it with the hard-coded default
141: ; values from its tables.
142: ;
143: ; This variable is set by [Param_BuildTypeLists].
144: ;
145: ; STF_NC_PNAMES = An INF list of the form:
146: ;
147: ; { { PARAMETER_1_NAME,
148: ; <name of variable>,
149: ; <default value> },
150: ; { PARAMETER_2_NAME,
151: ; <name of variable>,
152: ; <default value> },
153: ; ...
154: ; }
155: ;
156: ; The <name of variable> is the name of the
157: ; variable in the context level of the INF
158: ; file which contains the current setting
159: ; of the parameter.
160: ;
161: ; This variable is set by [Param_BuildTypeLists].
162: ;
163: ;
164: ; 9) During main installation, NTLANMAN.INF runs the detection
165: ; algorithm. If successful, and the netcard option returned
166: ; maps to a known INF file, the variables STF_NCDETCARD
167: ; and STF_NCOPTION are set.
168: ;
169: ; Then the INF is called. Note that the installation mode
170: ; may be CUSTOM or EXPRESS. It will always be CUSTOM for
171: ; post-installation usage from the NCPA.
172: ;
173: ; NTLANMAN.INF will set STF_NCOPTION to "" (empty string)
174: ; if the card was merely chosen and not detected. This will
175: ; always be the case in post-installation usage.
176: ;
177: ; An INF can therefore tell if the card was detected by
178: ; first checking $(!STF_NCDETECT) == YES, and then comparing
179: ; the option is was given to !STF_NCOPTION. If it's different,
180: ; then the option was chosen, not detected, and no detection
181: ; should be used.
182: ;
183: ; 10) The INF must instantiate the variables !STF_NC_PARAMS and
184: ; !STF_NC_PNAMES. See OEMNADD2.INF, section
185: ; [Param_BuildTypeList] for an example of this.
186: ;
187: ; 11) The routines in this file are used to interface between the
188: ; netcard INF, the global variables, and the wrapper functions
189: ; in NCPA.CPL.
190: ;
191: ; It is critical to note that the sections [Param_SetDefaults]
192: ; and [Param_VerifyCard] access and/or modify variables
193: ; in the calling INF through the use of the "!p:" syntax.
194: ;
195: ; THIS MEANS THAT THE NETCARD INF MUST BE THE IMMEDIATE PARENT!
196: ;
197: ; No "indirection" from another INF or a auxilliary section
198: ; in the netcard INF can be allowed. This would cause the
199: ; variables to be set in the caller's context, and then discarded
200: ; when that context was discarded to return to the netcard INF>
201: ;
202: ; 12) Every attempt has been made to document the routines in this
203: ; file throughly. Refer to their commentary for more details.
204: ;
205: ;===========================================================================
206: ; SECTION 2: Behavior of NTLANMAN.INF.
207: ;===========================================================================
208: ;
209: ;STEP 1: Installation of the detection sofware
210: ;
211: ; !STF_NCDETECT is set to "NO"
212: ;
213: ; * NETDTECT.INF is run by NTLANMAN.INF
214: ;
215: ; * OEMHOOK.INF is run by NTLANMAN.INF
216: ;
217: ; * NCPA's wrapper is used to start the NETDETECT service
218: ; If successful, !STF_NCDETECT is set to "YES"
219: ;
220: ;
221: ;STEP 2: Allow bypassing of detection
222: ;
223: ; * If EXPRESS, this step is skipped.
224: ; * If CUSTOM, present a dialog:
225: ;
226: ; +--------------------------------------------+
227: ; | Setup is about to attempt to detect your |
228: ; | netcard. If this is OK, click Continue. |
229: ; | |
230: ; | [Continue] [Bypass] [Help] |
231: ; +--------------------------------------------+
232: ;
233: ; * If "Bypass", set !STF_NCDETECT to NO
234: ;
235: ;
236: ;STEP 3: Detect the netcard
237: ;
238: ; * If !STF_NCDETECT == NO, skip this step
239: ;
240: ; * Call NCPA!CPlSetup( DTSTART )
241: ;
242: ; This creates the DETECTION_CONTROL object in NCPA.CPL.
243: ; If it fails, set !STF_DETECT to NO, display error
244: ; accordingly, and go to STEP 4.
245: ;
246: ; * do..while
247: ;
248: ; * Call NCPA!CPlSetup( DTCARD ) -- detect a card
249: ;
250: ; * If success && EXPRESS
251: ; save card index into !STF_NCDETCARD
252: ; save card option name into !STF_NCOPTION
253: ; Go to STEP 4.
254: ;
255: ; * If failed to find a card, do warning popup
256: ;
257: ; +--------------------------------------------+
258: ; | Setup was unable to determine the type |
259: ; | of network card in this machine. |
260: ; | |
261: ; | [Continue] [Try Again] |
262: ; +--------------------------------------------+
263: ;
264: ; If Continue,
265: ; set !STF_NCDETECT = NO, go to STEP 4
266: ; else,
267: ; call NCPA!CPlSetup( DTRESET ) (to reset
268: ; enumeration), then go to do..while.
269: ;
270: ; * If success, do popup:
271: ;
272: ; +--------------------------------------------+
273: ; | Setup found the following netcard in your |
274: ; | machine. If OK, click Accept, otherwise |
275: ; | you may stop detection or try again. |
276: ; | |
277: ; | [ Displayable name of netcard ] |
278: ; | |
279: ; | [Accept] [Try Again] [Stop] [Help] |
280: ; +--------------------------------------------+
281: ;
282: ; If Try Again, go to do..while.
283: ;
284: ; If Stop, set !STF_NCDETECT = NO, go to STEP 4.
285: ;
286: ; If Accept,
287: ; save card index into !STF_NCDETCARD
288: ; save card option name into !STF_NCOPTION
289: ; go to STEP 4.
290: ;
291: ;
292: ;STEP 4: Display netcard choice list if necessary
293: ;
294: ; * If !STF_NCDETECT == YES, go to STEP 5.
295: ;
296: ; * Present standard netcard listbox.
297: ;
298: ;
299: ;STEP 5: Run netcard INF file.
300: ;
301: ; * Each netcard INF file is aware of the following
302: ; global variables:
303: ;
304: ; !STF_INSTALL_MODE == {CUSTOM|EXPRESS}
305: ; !STF_NCDETECT == {YES|NO}
306: ; !STF_NCDETCARD == 0,1,2, etc.
307: ; !STF_NCOPTION == OPTIONNAME
308: ;
309: ; If !STF_NCDETECT == NO, no calls will be made to
310: ; NCPA!CPlSetup() to query or verify the card's configuration.
311: ;
312: ; !STF_NCDETCARD is the CARD_REFERENCE index maintained internally
313: ; by the code in NCPASETP.CXX.
314: ;
315: ;
316: ;STEP 6: Terminate detection
317: ;
318: ; * If !STF_NCDETECT == YES, call NCPA!CPlSetup( DTEND ).
319: ;
320: ; This terminates all detection and discards all memory associated
321: ; with netcard handling.
322: ;
323: ;
324: ;============================================================================
325: ; SECTION 3: Behavior of typical netcard INF
326: ;
327: ; (OEMNADD2.INF will be the exemplar)
328: ;============================================================================
329: ;
330: ;General Behavior:
331: ;
332: ; * If !STF_DETECT == NO, no interaction with the netcard detection software
333: ; will be attempted.
334: ;
335: ; * If !STF_DETECT == YES:
336: ;
337: ; * Detectable parameters are queried.
338: ;
339: ; * Overall confidence level is obtained.
340: ;
341: ; * If ( EXPRESS mode
342: ; and confidence >= 70
343: ; and no required parameters are undetected ),
344: ; parameters detect are verified so that IRQ conflicts
345: ; can be determined. If verification succeeds,
346: ; installation is performed silently.
347: ;
348: ; * Initial settings for controls are based upon the detected
349: ; settings.
350: ;
351: ; * If configuration dialog must be displayed, it is displayed.
352: ;
353: ; * On OK, verification is performed. If it fails, a popup appears:
354: ;
355: ; +--------------------------------------------+
356: ; | The <nnn> parameter appears to be in |
357: ; | conflict with another device. To reenter |
358: ; | new values, click Configure. If you click |
359: ; | Override, the parameters you entered will |
360: ; | be used as specified. |
361: ; | |
362: ; | [Configure] [Override] [Help] |
363: ; +--------------------------------------------+
364: ;
365: ; This cycle continues until satisfied.
366: ;
367: ;============================================================================
368: ;============================================================================
369: ;============================================================================
370:
371: [InitGlobals]
372: !STF_NCDETECT = "NO"
373: !STF_NCOPTION = ""
374: !STF_NCDETCARD = 0
375: !STF_NCDETINFO = {}
376:
377: [Param_SetGlobals]
378: Read-syms InitGlobals
379: return
380:
381: ;-----------------------------------------------------------------------
382: ;
383: ; ROUTINE: Param_ControlDetection
384: ;
385: ; DESCRIPTION: Control netcard detection; invoke parameterless
386: ; wrapper functions
387: ;
388: ; INPUTS: $0: DTSTART -- start detection
389: ; DTEND -- end detection
390: ; DTRESET -- discard old results, restart iteration
391: ;
392: ; OUTPUTS: $R0: STATUS_SUCCESSFUL if Ok
393: ;
394: ;------------------------------------------------------------------------
395: [Param_ControlDetection]
396:
397: Set DtMode = $($0)
398:
399: Debug-Output "NCPARAM.INF: calling "$(DtMode)" wrapper"
400:
401: Set FLibraryErrCtl = 1
402: LibraryProcedure StartResult $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), $(DtMode)
403: Set FLibraryErrCtl = 0
404:
405: Set StartStatus = *($(StartResult),1)
406: Debug-Output "NCPARAM.INF: "$(DtMode)" status was: "$(StartStatus)
407:
408: Ifint $(StartStatus) == 0
409: Set ReturnStatus = STATUS_SUCCESSFUL
410: Else
411: Set ReturnStatus = STATUS_FAILED
412: Endif
413:
414: Return $(ReturnStatus)
415:
416: ;-----------------------------------------------------------------------
417: ;
418: ; ROUTINE: Param_DetectCard
419: ;
420: ; DESCRIPTION: Perform netcard detection. DTSTART must have
421: ; already been called.
422: ;
423: ; INPUTS: Nothing
424: ;
425: ;
426: ; OUTPUTS: $R0: Result list from NCPA wrapper:
427: ;
428: ; { <error code>,
429: ; OPTIONNAME,
430: ; <card index>,
431: ; <numeric card type code>,
432: ; <detection confidence level>,
433: ; <bus interface type>,
434: ; <bus number>
435: ; }
436: ;
437: ;------------------------------------------------------------------------
438: [Param_DetectCard]
439:
440: Debug-Output "NCPARAM.INF: calling DTCARD wrapper"
441:
442: Set FLibraryErrCtl = 1
443: LibraryProcedure DetectResult $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), DTCARD
444: Set FLibraryErrCtl = 0
445:
446: Set Status = *($(DetectResult),1)
447: Debug-Output "NCPARAM.INF: DTCARD status was: "$(Status)
448:
449: Ifint $(DetectStatus) == 0
450: Set DtOption = *($(DetectResult),2)
451: Set DtIndex = *($(DetectResult),3)
452: Debug-Output "NCPARAM.INF: card found is type "$(DtOption)", index "$(DtIndex)
453: Endif
454:
455: Return $(DetectResult)
456:
457:
458: ;-----------------------------------------------------------------------
459: ;
460: ; ROUTINE: Param_BuildTypeLists
461: ;
462: ; DESCRIPTION: Run the DTPARAMS wrapper for the given netcard option
463: ; and merge the results with the list given.
464: ;
465: ; INPUTS: $0: Name of netcard option
466: : $1: Parameter control list of the form:
467: ;
468: ; { { <parameter name>,
469: ; <name of choice list var | NONE>,
470: ; <name of default var | NONE> },
471: ; ...
472: ; }
473: ;
474: ; OUTPUTS: $R0: STATUS_SUCCESSFUL if OK; if OK, then:
475: ;
476: ; !STF_NC_PARAMS is set to a list formatted as:
477: ;
478: ; { {PARAMETER_1_NAME,<setting control>,<confidence>,
479: ; {v1,v2,v3,...} },
480: ; {PARAMETER_2_NAME,<setting control>,<confidence>,
481: ; {v1,v2,v3,...} },
482: ; ...
483: ; }
484: ;
485: ; !STF_NC_PNAMES is set to a list formatted as:
486: ;
487: ; { {PARAMETER_1_NAME, <param variable name>, <param current value> },
488: ; {PARAMETER_2_NAME, <param variable name>, <param current value> },
489: ; ...
490: ; }
491: ;
492: ;
493: ; Also, the parameter choice list variables named in the
494: ; input list (if not "NONE") are created with values from the DLL.
495: ;
496: ;------------------------------------------------------------------------
497: [Param_BuildTypeLists]
498:
499: Set Option = $($0)
500: Set OptList = $($1)
501: Set Result1 = {}
502: Set Result2 = {}
503: Set !STF_NC_PARAMS = {}
504: Set !STF_NC_PNAMES = {}
505: Set Status = STATUS_FAILED
506:
507: ; Get parameter info from the detection DLLs for this card option
508:
509: Debug-Output "NCPARAM.INF: Querying parameters for netcard type: "$(Option)
510:
511: Set FLibraryErrCtl = 1 ; Report DLL errors back to INF code
512: LibraryProcedure NcpaResult $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), DTPARAMS, $(Option)
513: Set FLibraryErrCtl = 0
514:
515: Set ErrorStatus = *($(NcpaResult),1)
516: Debug-Output "NCPARAM.INF: DTPARAMS status was: "$(ErrorStatus)
517:
518: ; If error, return the input list
519:
520: Ifint $(ErrorStatus) != 0
521: Goto PMTL_Return
522: Endif
523:
524: Set DllList = *($(NcpaResult),2)
525: Debug-Output "NCPARAM.INF: DLL param type list is: "$(DllList)
526:
527: ; For each element in the input list, try to find its
528: ; corresponding element in the DLL's list. If found,
529: ; set the corresponding parameter choice list variable
530: ; and parameter default setting variable in the parent context.
531:
532: Set NbrOptions = 0
533: Set NbrFound = 0
534:
535: ForListDo $(OptList)
536: Set-add NbrOptions = $(NbrOptions),1
537: Set Found = 0
538: Set Plist = $($)
539: Set Pname = *($(Plist),1)
540: Set PlistVar = *($(Plist),2)
541: Set Pvar = *($(Plist),3)
542: Set Dentry = {}
543:
544: ForListDo $(DllList)
545: Set Dlist = $($)
546: Set Dname = *($(Dlist),1)
547: Set Dvlist = *($(Dlist),4)
548: Ifstr(i) $(Dname) == $(Pname)
549: Set Found = 1
550: Set Dvalue = *($(Dvlist),1)
551: Set Dentry = $(Dlist)
552: ; Set parameter choice list var value
553: Ifstr(i) $(PlistVar) != NONE
554: Set !p:$(PlistVar) = $(Dvlist)
555: Debug-Output "NCPARAM.INF: DLL param "$(Pname)" list var "$(PlistVar)" set"
556: Endif
557: Endif
558: EndForListDo
559:
560: Set-add NbrFound = $(NbrFound),$(Found)
561: Ifint $(Found) == 1
562: Set Result1 = >($(Result1),$(Dentry))
563: Set Result2 = >($(Result2),{$(Pname),$(Pvar),$(Dvalue)})
564: Else
565: Debug-Output "NCPARAM.INF: parameter "$(Pname)" not in DLL for "$(Option)
566: Endif
567:
568: EndForListDo
569:
570: Ifint $(NbrOptions) == $(NbrFound)
571: Set Status = STATUS_SUCCESSFUL
572: Set !STF_NC_PARAMS = $(Result1)
573: Set !STF_NC_PNAMES = $(Result2)
574: Debug-Output "NCPARAM.INF: Netcard list STF_NC_PARAMS for "$(Option)" is: "$(Result1)
575: Debug-Output "NCPARAM.INF: Netcard list STF_NC_PNAMES for "$(Option)" is: "$(Result2)
576: Endif
577:
578: PMTL_Return =+
579: Return $(Status)
580:
581: ;*************************************************************************
582: ;
583: ; ROUTINE: Param_SaveValues
584: ;
585: ; DESCRIPTION: Create a list containing the current values
586: ; of the netcard's parameters.
587: ;
588: ; INPUTS: !STF_NC_PNAMES
589: ;
590: ;
591: ; OUTPUTS: $R0: list identical in form to STF_NC_PNAMES, but
592: ; containing the current values of each parameter.
593: ;
594: ; Parameters with no corresponding variable name (e.g., NONE)
595: ; are not included.
596: ;
597: ;*************************************************************************
598: [Param_SaveValues]
599: Set Plist = {}
600:
601: ForListDo $(!STF_NC_PNAMES)
602: Set Pelem = $($)
603: Set Name = *($(Pelem),1)
604: Set Qvar = *($(Pelem),2)
605: Set Qvalue = *($(Pelem),3)
606:
607: Ifstr(i) $(Qvar) != "NONE"
608: Set Qvalue = $(!p:$(Qvar))
609: Set Plist = >($(Plist),{$(Name),$(Qvar),$(Qvalue)})
610: Endif
611: EndForListDo
612:
613: Return $(Plist)
614:
615: ;*************************************************************************
616: ;
617: ; ROUTINE: Param_DiffValues
618: ;
619: ; DESCRIPTION: Given a list of the STF_NC_PNAMES form, produce a new
620: ; list containing only those parameters whose values are
621: ; different from those in the input list.
622: ;
623: ; INPUTS: $0: list of the !STF_NC_PNAMES form;
624: ; (see [Param_SaveValues])
625: ;
626: ; OUTPUTS: $R0: list identical in form to STF_NC_PNAMES, but
627: ; containing the current values of each parameter.
628: ;
629: ; Parameters with no corresponding variable name (e.g., NONE)
630: ; are not included.
631: ;
632: ;*************************************************************************
633: [Param_DiffValues]
634:
635: Set Plist = {}
636:
637: ForListDo $($0)
638: Set Pelem = $($)
639: Set Name = *($(Pelem),1)
640: Set Qvar = *($(Pelem),2)
641: Set Qvalue = *($(Pelem),3)
642:
643: Ifstr(i) $(Qvar) != "NONE"
644: Set QnewValue = $(!p:$(Qvar))
645: Ifint $(QnewValue) != $(Qvalue)
646: Debug-Output "NCPARAM.INF: Param_DiffValues: param "$(Name)" value has changed"
647: Set Plist = >($(Plist),{$(Name),$(Qvar),$(QnewValue)})
648: Endif
649: Endif
650: EndForListDo
651:
652: Return $(Plist)
653:
654: ;-----------------------------------------------------------------------
655: ;
656: ; ROUTINE: Param_SetDefaults
657: ;
658: ; DESCRIPTION: Given the (possibly empty) set of results of a
659: ; call to Query Netcard Parameters (DTQUERY), set the default
660: ; value variables. First choice is to a detected value;
661: ; second choice is the hard-coded default in [ParamSettings].
662: ;
663: ; INPUTS: $0: List returned by [Param_QueryCard] section below or
664: ; an empty list, {}.
665: ;
666: ; !STF_NC_PNAMES list created by INF file.
667: ;
668: ; OUTPUTS: Variables named in !STF_NC_PNAMES are set.
669: ;
670: ;------------------------------------------------------------------------
671: [Param_SetDefaults]
672:
673: Set QueryList = $($0)
674: Debug-Output "NCPARAM.INF: Param_SetDefaults, QueryList = "$(QueryList)
675:
676: ; Iterate the name list; find the corresponding value in the
677: ; QueryList, if any.
678:
679: ForListDo $(!STF_NC_PNAMES)
680: Set Pelem = $($)
681: Set Name = *($(Pelem),1)
682: Set Qvar = *($(Pelem),2)
683: Set Qvalue = *($(Pelem),3)
684:
685: ForListDo $(QueryList)
686: Set Qname = *($($),1)
687: Ifstr(i) $(Qname) == $(Name)
688: ; Found a matching value from QueryList
689: Debug-Output "NCPARAM.INF: Param_SetDefaults: default override for param "$(Qname)
690: Set Qvalue = *($($),2)
691: Endif
692: EndForListDo
693:
694: ; If the name of the value-containing variable is not "NONE",
695: ; set it IN THE PARENT CONTEXT!
696:
697: Ifstr(i) $(Qvar) != "NONE"
698: Debug-Output "NCPARAM.INF: Param_SetDefaults: setting "$(Qvar)" to "$(Qvalue)
699: Set !p:$(Qvar) = $(Qvalue)
700: Endif
701:
702: EndForListDo
703:
704: Return
705:
706:
707: ;-----------------------------------------------------------------------
708: ;
709: ; ROUTINE: Param_QueryCard
710: ;
711: ; DESCRIPTION: Call the NCPA's QueryConfiguration wrapper. Return
712: ; the list or the error.
713: ;
714: ; INPUTS: $0: integer detected card index
715: ;
716: ; OUTPUTS: $R0: STATUS_SUCCESSFUL if OK
717: ; $R1: QueryList; format:
718: ;
719: ; { {PARAMETER_1_NAME, <detected value> },
720: ; {PARAMETER_2_NAME, <detected value> },
721: ; ...
722: ; }
723: ;
724: ;------------------------------------------------------------------------
725: [Param_QueryCard]
726: Set CardIndex = $($0)
727: Set Status = STATUS_SUCCESSFUL
728: Set ResultList = {}
729:
730: Debug-Output "OEMNADDE.INF: Querying parameters for netcard "$(CardIndex)
731:
732: Set FLibraryErrCtl = 1 ; Report DLL errors back to INF code
733: LibraryProcedure NcpaResult $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), DTQUERY, $(CardIndex)
734: Set FLibraryErrCtl = 0
735:
736: Set ErrorStatus = *($(NcpaResult),1)
737: Debug-Output "NCPARAM.INF: DTQUERY status was: "$(ErrorStatus)
738:
739: Ifint $(ErrorStatus) != 0
740: Set Status = STATUS_FAILED
741: Else
742: Set ResultList = *($(NcpaResult),2)
743: Endif
744:
745: Return $(Status) $(ResultList)
746:
747: ;-----------------------------------------------------------------------
748: ;
749: ; ROUTINE: Param_VerifyCard
750: ;
751: ; DESCRIPTION: Call the NCPA's VerifyConfiguration wrapper. Return
752: ; the result. Current settings must be in the variables
753: ; named as default variables in the [ParamSettings]
754: ; section.
755: ;
756: ; INPUTS: $0: integer detected card index
757: ;
758: ; !STF_NC_PNAMES list
759: ;
760: ; OUTPUTS: $R0: STATUS_SUCCESSFUL if OK
761: ;
762: ; NOTES: The [ParamSettings] section is used to build up
763: ; a list of the following form:
764: ;
765: ; { {PARAMETER_1_NAME, <chosen value> },
766: ; {PARAMETER_2_NAME, <chosen value> },
767: ; ...
768: ; }
769: ;
770: ;------------------------------------------------------------------------
771: [Param_VerifyCard]
772: Set CardIndex = $($0)
773:
774: Set Status = STATUS_FAILED
775: Set VerifyList = {}
776:
777: ; Build up the list of parameters using the default value
778: ; variable from the PARENT CONTEXT. Ignore empty variables.
779:
780: ForListDo $(!STF_NC_PNAMES)
781: Set Pelem = $($)
782: Set Name = *($(Pelem),1)
783: Set Qvar = *($(Pelem),2)
784: Set Qvalue = $(!p:$(Qvar))
785: Ifstr(i) $(Qvalue) != ""
786: Debug-Output "NCPARAM.INF: VerifyCard: "$(Qvar)" = "$(Qvalue)
787: Set VerifyList = >($(VerifyList),{$(Name),$(Qvalue)})
788: Endif
789: EndForListDo
790:
791: ; Verify the parameters.
792:
793: Debug-Output "NCPARAM.INF: Verifying parameters for netcard "$(CardIndex)
794: Debug-Output "NCPARAM.INF: Parameters are: "$(VerifyList)
795:
796: Set FLibraryErrCtl = 1 ; Report DLL errors back to INF code
797: LibraryProcedure NcpaResult $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), DTVERIFY, $(CardIndex), $(VerifyList)
798: Set FLibraryErrCtl = 0
799:
800: Set ErrorStatus = *($(NcpaResult),1)
801: Debug-Output "NCPARAM.INF: DTVERIFY status was: "$(ErrorStatus)
802:
803: Ifint $(ErrorStatus) == 0
804: Set Status = STATUS_SUCCESSFUL
805: Endif
806:
807: Return $(Status)
808:
809: ;-----------------------------------------------------------------------
810: ;
811: ; ROUTINE: Param_VerifyResources
812: ;
813: ; DESCRIPTION: Call the NCPA's VerifyConfiguration wrapper for
814: ; and existing card. This routine "diffs" the current
815: ; parameter settings and attempts to "claim" the new
816: ; parameters at the NT level. See [Param_SaveValues]
817: ; and [Param_DiffValues] for list construction details.
818: ;
819: ; INPUTS: $0: parameter difference list produced by [Param_DiffValues]
820: ;
821: ; OUTPUTS: $R0: STATUS_SUCCESSFUL if OK
822: ;
823: ; NOTES: If $0 is the empty list, STATUS_SUCCESSFUL is returned.
824: ;
825: ; A list of the following form is constructed for DTVERIFY:
826: ;
827: ; { {PARAMETER_1_NAME, <chosen value> },
828: ; {PARAMETER_2_NAME, <chosen value> },
829: ; ...
830: ; }
831: ;
832: ;------------------------------------------------------------------------
833: [Param_VerifyResources]
834: Set DiffParamList = $($0)
835:
836: ; See if the difference list is empty
837:
838: Ifstr(i) $(DiffParamList) == {}
839: Set Status = STATUS_SUCCESSFUL
840: Goto PVR_Return
841: Endif
842:
843: Set Status = STATUS_FAILED
844:
845: ; Build up the list of parameters which have changed.
846:
847: Set VerifyList = {}
848: ForListDo $(DiffParamList)
849: Set Pelem = $($)
850: Set Name = *($(Pelem),1)
851: Set Qvar = *($(Pelem),2)
852: Set Qvalue = $(!p:$(Qvar))
853: Ifstr(i) $(Qvalue) != ""
854: Debug-Output "NCPARAM.INF: VerifyResources: "$(Qvar)" = "$(Qvalue)
855: Set VerifyList = >($(VerifyList),{$(Name),$(Qvalue)})
856: Endif
857: EndForListDo
858:
859: ; Claim the resource delta.
860:
861: Debug-Output "NCPARAM.INF: VerifyResources: Claiming changed resource parameter values"
862: Debug-Output "NCPARAM.INF: Parameters are: "$(VerifyList)
863:
864: Set FLibraryErrCtl = 1 ; Report DLL errors back to INF code
865: LibraryProcedure NcpaResult $(!NCPA_HANDLE), CPlSetup $(!STF_HWND), DTCLAIM, $(VerifyList)
866: Set FLibraryErrCtl = 0
867:
868: Set ErrorStatus = *($(NcpaResult),1)
869: Debug-Output "NCPARAM.INF: DTCLAIM status was: "$(ErrorStatus)
870:
871: Ifint $(ErrorStatus) == 0
872: Set Status = STATUS_SUCCESSFUL
873: Endif
874:
875: PVR_Return = +
876: Return $(Status)
877:
878: ;-----------------------------------------------------------------------
879: ;
880: ; ROUTINE: Param_ParameterConfidence
881: ;
882: ; DESCRIPTION: Return TRUE if the netcard's required parameters are
883: ; detectable.
884: ;
885: ; Iterate over STF_NC_PARAMS; check that all the type
886: ; 0 and 1 parameters have a detection confidence
887: ; factor greater than 70.
888: ;
889: ; INPUTS: None
890: ;
891: ; OUTPUTS: $R0: STATUS_SUCCESSFUL or STATUS_FAILED
892: ;
893: ;------------------------------------------------------------------------
894: [Param_ParameterConfidence]
895:
896: Set LowestConf = 100
897: Set Status = STATUS_SUCCESSFUL
898: Set LowestParam = ""
899:
900: ForListDo $(!STF_NC_PARAMS)
901: Set Ptype = *($($),2)
902: Set Pconf = *($($),3)
903: Ifint $(Ptype) < 2
904: Ifint $(Pconf) < $(LowestConf)
905: Set LowestConf = $(Pconf)
906: Set LowestParam = *($($),1)
907: Endif
908: Endif
909: EndForListDo
910:
911: Ifint $(LowestConf) < 70
912: Set Status = STATUS_FAILED
913: Debug-Output "NCPARAM.INF: parameter "$(LowestParam)" cannot be adequately detected"
914: Endif
915:
916: Return $(Status)
917:
918: ;-----------------------------------------------------------------------
919: ;
920: ; ROUTINE: HexListFromDecList
921: ;
922: ; DESCRIPTION: Return a list of hex values from a list of decimal values
923: ;
924: ; INPUTS: $0: the input list of decimal numbers
925: ;
926: ; OUTPUTS: $R0: the result list of hex values
927: ;
928: ;------------------------------------------------------------------------
929: [HexListFromDecList]
930:
931: Set HexList = {}
932:
933: ForListDo $($0)
934: Set-DecToHex HexValue = $($)
935: Set HexList = >($(HexList),$(HexValue))
936: EndForListDo
937:
938: Return $(HexList)
939:
940: ;-----------------------------------------------------------------------
941: ;
942: ; End of NCPARAM.INF
943: ;
944: ;-----------------------------------------------------------------------
945:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.