|
|
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.