; OEMSETUP FILE FOR EtherWORKS TURBO PCI 10 Adapters ; WNT V3.51 and V4.0 - DE450.SYS V1.10 ; ; Platform type : ALPHA, Ix86, MIPs, PPC ; Supported Adapters: DE450 ; ; Digital Equipment Corporation, Maynard, Mass. ; ; The information in this software is subject to change without ; notice and should not be construed as a commitment by Digital ; Equipment Corporation. ; ; Usage: ; ; This file is the installation/configuration/deinstallation ; procedure of the driver for Windows NT (DE450). It can be ; called from Windows setup directly, or via the Windows NT ; Networks Control Program Applet (NCPA) from inside the ; Windows Control Panel. ; ; set !DebugOutputControl = 1 ; Turn On Debugging for Install testing ; Debug-Output " Turn on Debugger... " ;****************** ;* IDENTIFICATION * ;****************** [Identification] OptionType = NetAdapter ;*********************** ;* PLATFORMS SUPPORTED * ;*********************** [PlatformsSupported] ISA EISA "Jazz-Internal Bus" PCI ;**************************************** ;* OPTIONS - Order IS be important here * ;* Must match order in OptionsTextENG * ;**************************************** [Options] DE450 ;*************************** ;* CONNECTION TYPE CHOICES * ;*************************** [MediaChoicesDE450] Media_0 = "AutoSense", 0 Media_1 = "TP", 1 Media_2 = "BNC", 2 Media_3 = "AUI", 3 Media_4 = "TP-Full Duplex", 4 ;****************************** ;* TRANSMIT THRESHOLD CHOICES * ;****************************** [TXThresholdChoicesDE450] TXThreshold_0 = "72", 0 TXThreshold_1 = "96", 1 TXThreshold_2 = "128", 2 TXThreshold_3 = "160", 3 ;**************************** ;* DEFINITIONS USED IN CODE * ;**************************** [FileConstants] UtilityInf = "UTILITY.INF" subroutineinf = "SUBROUTN.INF" SoftwareType = "driver" NetEventDLL = "%SystemRoot%\System32\netevent.dll" Manufacturer = "DigitalEquipmentCorporation" ProductMajorVersion = "1" ProductMinorVersion = "05" ProductVersion = $(ProductMajorVersion)"."$(ProductMinorVersion) VendorID = 4113 ;; 1011 (DEC) ; ; Software Specific Information Below. ; ProductSoftwareName = "DE450_" ; current driver name ProductSoftwareTitle = "DEC DE450 Adapter Driver" ProductSoftwareImagePath = "%SystemRoot%\System32\drivers\DE450.sys" NetRuleSoftwareType = "DE450Sys ndisDriver DE450Driver" NetRuleSoftwareUse = $(SoftwareType) NetRuleSoftwareBindForm = """DE450Sys"" yes no container" NetRuleSoftwareClass = {"DE450Driver basic"} NetRuleSoftwareSWBindable = {"DE450Driver DE450Adapter non exclusive 100"} OptionHelpFile = "DE450.HLP" ProductHardwareName = "DE450_" PCIAdapterType = 5 PCIBusType = 5 ; ; Hardware Specific Information Below. ; ; Note that in the HardwareParam Lists, ConnectionType is not present. ; ConnectionType is queried by a dialog box, and entered into the ; registry with that information. MapRegisters is also determined ; elsewhere, as are BusNumber, FunctionNumber, and DeviceType. ; ; Also note that only parameters with CONSTANT values can be here. ; If you try to use a variable in one of these lists, it will not ; work the way you expect! ; ; DE450 Information ProductHardwareDE450Title = "DEC DE450 EtherWORKS Turbo PCI 10 Adapter" NetRuleHardwareDE450Type = "DE450 DE450Adapter" NetRuleHardwareDE450Class = {"DE450Adapter basic"} HelpDE450Id = 1 DE450CFID = 1314833 DE450HardwareParamList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(PCIBusType)},+ {MediaType,$(NoTitle),$(!REG_VT_DWORD),1}} NetRuleHardwareBindForm = " yes yes container" ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion" DE450ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(DE450ProductSoftwareName)"\CurrentVersion" VersionKeyName = $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion" [GeneralConstants] KeyNull = "" MAXIMUM_ALLOWED = 33554432 KeyProduct = "" KeyParameters = "" TRUE = 1 FALSE = 0 NoTitle = 0 [date] Now = {} ? $(!LIBHANDLE) GetSystemDate ;******************** ;* IDENTIFY SECTION * ;******************** ; ; The [Identify] section is the first section executed by Setup. It ; returns information to Setup about the type of drivers that can ; be installed by this .INF file (in our case, network drivers). ; [Identify] read-syms Identification set Status = STATUS_SUCCESSFUL set Identifier = $(OptionType) set SourceMedia = #("Source Media Descriptions", 1, 1) Return $(Status) $(Identifier) $(SourceMedia) ;************************** ;* RETURN OPTIONS SECTION * ;************************** ; ; If the [Identify] section indicates that the .INF file supports ; the appropriate type of driver, Setup calls the [ReturnOptions] ; section. Setup passes a single parameter to this section, ; indicating the language to be used for dialog strings. This ; section returns information to the Setup program, listing the ; names of any drivers which can be installed by this .INF file. ; It also returns the text strings for each driver to be used in ; the dialog box asking the user to select the driver to install. ; [ReturnOptions] ; ; Initialize variables to failure state. ; set Status = STATUS_FAILED set OptionList = {} set OptionTextList = {} ; ; See if our language list supports the language specified. ; set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) not-in $(LanguageList) set Status = STATUS_NOLANGUAGE goto finish_ReturnOptions endif ; ; If a second parameter was passed in, see if it is a supported ; platform. ; ifstr(i) $($1) != "" set PlatformList = ^(PlatformsSupported, 1) Ifcontains(i) $($1) not-in $(PlatformList) set Status = STATUS_NOTSUPPORTED goto finish_ReturnOptions endif endif ; ; If we get here, we are successful, so return the option list. ; set OptionList = ^(Options, 1) set OptionTextList = ^(OptionsText$($0), 1) set Status = STATUS_SUCCESSFUL ; ; Exit from this section. ; finish_ReturnOptions = + Return $(Status) $(OptionList) $(OptionTextList) ;************************* ;* INSTALLOPTION SECTION * ;************************* ; ; If the [ReturnOptions] section returns successfully, indicating ; the language is supported, Setup displays a dialog box from which ; the user can select a driver to install. Setup then calls the ; [InstallOption] section, with the following parameters: ; ; Language to use ; OptionID to install (DE450) ; SourceDirectory ; AddCopy (yes/no) ; DoCopy (yes/no) ; DoConfig (yes/no) ; ; ScrDir seems to always be A:\, even when you later install from ; the oemnad#.inf which is copied to the system32 directory. ; ; AddCopy and DoCopy are valid only when NTN_InstallMode = install. ; AddCopy is yes if the files should be added to the copy list. ; DoCopy is yes if CopyFilesInCopyList should be called. ; ; DoConfig is not used for network cards. ; ; This .INF file is automatically copied to the SYSTEM32 directory, ; by WinNT, and renamed so as to have a unique name. ; [InstallOption] ;set !DebugOutputControl = 1 ; Turn On Debugging for Install testing Debug-Output "oemsetup for "$(ProductHardwareName)" V"$(ProductVersion)" ..." ; ; Read input parameters. ; set Option = $($1) set SrcDir = $($2) set AddCopy = $($3) set DoCopy = $($4) set DoConfig = $($5) ; ; Check if specified language is supported. ; set LanguageList = ^(LanguagesSupported, 1) Ifcontains(i) $($0) NOT-IN $(LanguageList) Return STATUS_NOLANGUAGE endif ; ; Set up local variables and constant values. ; set-subst LF = "\n" read-syms GeneralConstants read-syms FileConstants read-syms DialogConstants$(!STF_LANGUAGE) read-syms FileConstants$(!STF_LANGUAGE) read-syms FileDependentDlg$(!STF_LANGUAGE) SetHelpFile $(!STF_WINDOWSSYSPATH)"\"$(OptionHelpFile) $(MinHelpId) $(MaxHelpId) detect date set-title $(Function$(Option)Title) set CommonStatus = STATUS_SUCCESSFUL EndWait ; ; Problem was discovered using unattend.txt files for automatic ; installation. It was found that $2 passed into this section does ; not have an appropriate value when using unattend.txt. It was ; found that during manual AND unattended installations, the variable ; STF_SRCDIR_OVERRIDE did contain an appropriate value. ; ifstr(i) $(!STF_SRCDIR_OVERRIDE) != "" set SrcDir = $(!STF_SRCDIR_OVERRIDE) endif ; ; NTN_InstallMode ; install - this is a primary or original installation, it ; may be an upgrade ; deinstall - this product and its binaries are to be removed ; from the disk ; configure - this product is to be (re-) configured ; bind - this product's relationships to other products ; have changed and should be reviewed. ; Ifstr(i) $(!NTN_InstallMode) == deinstall set StartLabel = removeadapter else-Ifstr(i) $(!NTN_InstallMode) == Update set StartLabel = UpgradeSoftware else-Ifstr(i) $(!NTN_InstallMode) == bind set StartLabel = bindingadapter else-Ifstr(i) $(!NTN_InstallMode) == configure set StartLabel = configureadapter else set StartLabel = installadapter endif ; ; HARDWARE_PUT_IN_REGISTRY gets set to true once the hardware ; component is installed. That way if we get an error we know ; to uninstall it. HWList has the path to the hardware that ; is needed by RemoveHardwareComponent. ; ; SOFTWARE_PUT_IN_REGISTRY gets set to true once the software ; component is installed. ; set HARDWARE_PUT_IN_REGISTRY = $(FALSE) set HWList = "" set SOFTWARE_PUT_IN_REGISTRY = $(FALSE) ;------------------------------------------------------------------- ; Get the NT version (3.50 or ...) ;------------------------------------------------------------------- ; OpenRegKey $(!REG_H_LOCAL) "" $(VersionKeyName) $(MAXIMUM_ALLOWED) KeyVersion GetRegValue $(KeyVersion),"CurrentVersion",VersionStruct CloseRegKey $(KeyVersion) Set NTVersion = *($(VersionStruct),4) Ifstr(i) $(NTVersion) == "3.50" set $R0 = "Windows NT 3.50 not supported on this distribution." goto fatal endif ; ; Go to the appropriate section for this installation mode. ; Debug-Output "StartLabel "$(StartLabel) goto $(StartLabel) ;------------------------------------------------------------------------ ; InstallMode = install ; Came here straight from figuring out which platform we are on. ; Option, SrcDir, AddCopy, DoCopy, and DoConfig are valid. ; installadapter = + ; ; Set up default for Map Registers ; Set NumMapRegisters = 8 ;------------------------------------------------------------------- ; Determine the platform and set the correct driver/help paths. ;------------------------------------------------------------------- ; set Help_Directory = "WINNT" Ifstr $(!STF_PLATFORM) == "Alpha" set Source_Directory = "WINNT\ALPHA" else-ifstr $(!STF_PLATFORM) == "Mips" set Source_Directory = "WINNT\MIPS" else-ifstr $(!STF_PLATFORM) == "I386" set Source_Directory = "WINNT\INTEL" else-ifstr $(!STF_PLATFORM) == "ppc" set Source_Directory = "WINNT\PPC" else set $R0 = "This platform is not recognized and not supported by this distribution." goto fatal endif ;------------------------------------------------------------------- ; Check to see if a different version of this driver was installed. ;------------------------------------------------------------------- SWCheckThisProductKeyName = + ; ; Get open handle KeyProduct. ; Returns an empty string if key does not exist. ; ; NTN_RegBase appears empty on the installation of the first card. ; KeyProduct will be KeyNull on the installation of the first card. ; OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct ; ; We cannot assume that the adapter has never been installed before. ; The spec says we must check for older versions of the software ; (NTN_RegBase = ProductKeyName) and tell the user to use update. ; However, NT does not do update properly, so tell user ; to remove and re-install in this situation. ; The spec says we should warn about already finding this hardware ; installed. We'll do that and allow the option of continuing. ; Ifstr $(KeyProduct) != $(KeyNull) ;------------------------------------------------------------------- ; Software exists - do some checking ;------------------------------------------------------------------- ; If key already exists, get software version info. ; GetRegValue $(KeyProduct) MajorVersion OldMajorVersionList GetRegValue $(KeyProduct) MinorVersion OldMinorVersionList CloseRegKey $(KeyProduct) set OldMajorVersion = *($(OldMajorVersionList),4) set OldMinorVersion = *($(OldMinorVersionList),4) ; ; If the old version is the same as ours, no problem. ; If not the same, fatal error. ; ifstr(i) $(OldMajorVersion) != $(ProductMajorVersion) goto SWversionMismatch endif ifstr(i) $(OldMinorVersion) != $(ProductMinorVersion) goto SWversionMismatch endif goto SWversionOK SWversionMismatch = + set $R0 = $(Option)".SYS V"$(OldMajorVersion)"."$(OldMinorVersion)+ "already exists on the system. Please use the remove button for all DE450 and re-install." goto fatal SWversionOK = + Else ;------------------------------------------------------------------- ; Add software info to the registry ;------------------------------------------------------------------- ; This is a new software component - need to add version, descr, ... ; StartWait ; ; If we are not installing from floppy, NT will detect that the ; floppy is not present and ask for one. ; ; Copy the driver and help file. ; If this is being installed from the oemnad#.inf on the ; hard disk, NT will look for the disk in the floppy drive, ; not find it, and prompt the user to install it. ; ifstr(i) $(AddCopy) == "YES" install "Install-AddList" ; ; Only do the copy if the add was successful. ; Note: do NOT use !STF_INSTALL_OUTCOME, it doesn't work! ; ifstr(i) $(STF_INSTALL_OUTCOME) == STF_SUCCESS ifstr $(DoCopy) == "YES" install "Install-CopyList" endif endif endif ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS set $R0 = "Could not copy driver and help files." goto fatal endif ; ; AddSoftwareComponent adds all the registry information ; neccessary for a new software component. This involves ; creating the SOFTWARE area and the SERVICE area. Returns: ; R1 key for SOFTWARE\Manufacturer\Product\Version ; R2 key for SOFTWARE\..\NetRules ; R3 key handle for SERVICES key ; R4 "Parameters" key handle for Services area ; R5 "Linkage" key handle for Services area ; Shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), + $(ProductSoftwareName), + $(ProductSoftwareName), + $(ProductSoftwareTitle), $(STF_CONTEXTINFNAME), + $(ProductSoftwareImagePath), "kernel", "NDIS", {}, "",+ $(NetEventDLL) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif Set SOFTWARE_PUT_IN_REGISTRY = $(TRUE) Set SoftProductKey = $($R1) Set SoftNetRuleKey = $($R2) Set SoftServiceKey = $($R3) Set SoftParameterKey = $($R4) Set SoftLinkageKey = $($R5) ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding software component. Reboot and try again." goto SWAddComplete endif ; ; Create a value list for this entry. ; Each entry in ValueList is a list containing: ; ValueName ; Index (must be zero) ; ValueType ; ValueData ; ; Put this value list in SOFTWARE\Manufacturer\Product\Version ; set NewValueList = {{SoftwareType,$(NoTitle),$(!REG_VT_SZ),$(SoftwareType)},+ {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMajorVersion)},+ {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMinorVersion)},+ {Title,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareTitle)},+ {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareDescription)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),$(ProductSoftwareName)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}} Shell $(UtilityInf), AddValueList, $(SoftProductKey), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto SWAddComplete endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding software version info." goto SWAddComplete endif ; ; Set up value list for SOFTWARE\..\NetRules and write it. ; set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareType)},+ {use,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareUse)}, + {bindform,$(NoTitle),$(!REG_VT_SZ),$(NetRuleSoftwareBindForm)}, + {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareClass)}, + {bindable,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleSoftwareSWBindable)}, + {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}} Shell $(UtilityInf), AddValueList, $(SoftNetRuleKey), $(NewValueList) ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding software netrules." endif SWAddComplete = + CloseRegKey $(SoftProductKey) CloseRegKey $(SoftNetRuleKey) CloseRegKey $(SoftServiceKey) CloseRegKey $(SoftParameterKey) CloseRegKey $(SoftLinkageKey) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R0) != "NO_ERROR" goto fatal endif endif ; end installation of SW component, if this is a new component ;----------------------------------------------------------------------- ; Get the list of cards to install. ;----------------------------------------------------------------------- ; Use GetPCIInformation to get list of PCI cards with this device ID. ; ; ; **** Get Adapter List for the 21041 chip **** ; ; Shift CFID to get device ID for 21041 ; set-div DeviceID = $(DE450CFID) 65336 ; ; GetPCIInformation returns AdapterList entry in R0 ; - the list contains all cards of that option CFID, ; with their BusNum and DeviceNum. ; Note that R0 does NOT contain "NO_ERROR" as with most utility calls. ; Shell $(UtilityInf), GetPCIInformation, $(VendorID) $(DeviceID) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif set AdapterList = $($R0) ifstr(i) $(AdapterList) == {} set $R0 = $(Option)" network card is not present in the system." goto fatal endif ;----------------------------------------------------------------------- ; Put the hardware information in the registry ;----------------------------------------------------------------------- ; After installing one, keep going until the adapterlist is empty. ; ; Note it is illegal to use a "goto" inside the ForListDo ; that jumps to somewhere outside the ForListDo. ; set DropThroughForListDo = $(FALSE) ForListDo $(AdapterList) Set HW_KEYS_OPEN = $(FALSE) ifint $(DropThroughForListDo) == $(FALSE) ; ; Set up BusNum, DeviceNum, and FuncNum. ; set BusNum = *($($),1) set DeviceNum = *($($),2) set FuncNum = *($($),3) Shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNum), + $(DeviceNum), $(ProductHardware$(Option)Description), + $(ProductHardwareName) "YES" ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ForListDropThrough else-ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error in determining if netcard is already installed." goto ForListDropThrough else-ifstr(i) $($R1) == "YES" ;already installed, goto ThisForIterationDone ; so skip it and try next endif ; ; Get the value for ConnectionType, returned in ConnectionValue. ; Note that this parameter does not apply to DE425 - its ; ConnectionValue is determined in the EISA setup. ; ;Ifstr(i) $(Option) != "DE425" ; SetHelpFile $(!STF_WINDOWSSYSPATH)"\"$(OptionHelpFile) $(MinHelpId) $(MaxHelpId) $(Help$(Option)Id) ; ui start "InputDlg" ; ui pop 1 ; ifstr(i) $(DLGEVENT) != "CONTINUE" ; set CommonStatus = STATUS_USERCANCEL ; goto ForListDropThrough ; else ; set ConnectionListOut = $(Combo1Out) ; set ConnectionValue = *($(ConnectionValues), ~($(ConnectionList),$(ConnectionListOut))) ; ifstr(i) $(ConnectionValue) == "" ; set ConnectionValue = *($(ConnectionValues), 1) ; endif ; endif ;endif ;*** temp below set ParamMedia = 0 set ParamTX_Threshold = 2 ; ; Install one iteration of the hardware in the registry. ; ; Note that $(STF_CONTEXTINFNAME) translates to oemnad#.inf ; $(!STF_CONTEXTINFNAME) translates to NCPASHEL.INF ; Shell $(UtilityInf), AddHardwareComponent, $(ProductHardwareName), + $(STF_CONTEXTINFNAME), $(ProductKeyName) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ForListDropThrough endif ifint $($R4) == -1 set $R0 = "Error getting "$(Option)" adapter number." goto ForListDropThrough endif Set HW_KEYS_OPEN = $(TRUE) Set HARDWARE_PUT_IN_REGISTRY = $(TRUE) Set HWList = >($(HWList), + $(!NTN_SoftwareBase)"\Microsoft\Windows NT\CurrentVersion\NetworkCards\"$($R4)) Set HardNetCardKey = $($R1) Set HardNetRuleKey = $($R2) Set HardParameterKey = $($R3) Set AdapterNumber = $($R4) ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding hardware to registry." goto ForListDropThrough endif ; ; Set up and write general card information to registry. ; set NewValueList = {{Manufacturer,$(NoTitle),$(!REG_VT_SZ),$(Manufacturer)},+ {Title,$(NoTitle),$(!REG_VT_SZ),"["$($R4)"] "$(ProductHardware$(Option)Title)},+ {Description,$(NoTitle),$(!REG_VT_SZ),$(ProductHardware$(Option)Description)},+ {ProductName,$(NoTitle),$(!REG_VT_SZ),$(ProductHardwareName)},+ {ServiceName,$(NoTitle),$(!REG_VT_SZ),$($R5)},+ {InstallDate,$(NoTitle),$(!REG_VT_DWORD),*($(Now),1)}} Shell $(UtilityInf), AddValueList, $(HardNetCardKey), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ForListDropThrough endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding general hardware info to registry." goto ForListDropThrough endif ; ; Set up and write hardware parameters to registry. ; Write: ; Media, TX_Threshold ; Hardware parameters defined as constants ; BusNumber, SlotNumber, FunctionNumber ; set NewValueList = {{Media,$(NoTitle),$(!REG_VT_DWORD),$(ParamMedia)},+ {TX_Threshold,$(NoTitle),$(!REG_VT_DWORD),$(ParamTX_Threshold)}} Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ForListDropThrough endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding programmable parameters to registry." goto ForListDropThrough endif Shell $(UtilityInf), AddValueList, $(HardParameterKey), $($(Option)HardwareParamList) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ForListDropThrough endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding hardware parameters to registry." goto ForListDropThrough endif set NewValueList = {{BusNumber,$(NoTitle),$(!REG_VT_DWORD),$(BusNum)},+ {SlotNumber,$(NoTitle),$(!REG_VT_DWORD),$(DeviceNum)},+ {FunctionNumber,$(NoTitle),$(!REG_VT_DWORD),$(FunctionNum)}} Shell $(UtilityInf), AddValueList, $(HardParameterKey), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ForListDropThrough endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding bus/slot/function numbers to registry." goto ForListDropThrough endif ; ; Set up and write hardware net rules. ; set TempProdName = """"$(ProductHardwareName)$(AdapterNumber)"""" set TempBindForm = $(TempProdName)$(NetRuleHardwareBindForm) set NewValueList = {{type,$(NoTitle),$(!REG_VT_SZ),$(NetRuleHardware$(Option)Type)},+ {bindform,$(NoTitle),$(!REG_VT_SZ),$(TempBindForm)}, + {class,$(NoTitle),$(!REG_VT_MULTI_SZ),$(NetRuleHardware$(Option)Class)}, + {InfOption,$(NoTitle),$(!REG_VT_SZ),$(Option)}} Shell $(UtilityInf), AddValueList, $(HardNetRuleKey), $(NewValueList) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ForListDropThrough endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error adding hardware net rules to registry." goto ForListDropThrough endif goto ThisForIterationDone endif ; end of "If DropThroughForList is false ..." ForListDropThrough = + set DropThroughForListDo = $(TRUE) ThisForIterationDone = + ifint $(HW_KEYS_OPEN) == $(TRUE) CloseRegKey $(HardNetCardKey) CloseRegKey $(HardNetRuleKey) CloseRegKey $(HardParameterKey) endif EndForListDo CloseRegKey $(KeyProduct) ; ; There are a number of ways to exit the above ForListDo. ; 1. ShellCodeError - fatal, just go process the error ; SHOULD NEVER HAPPEN ; 2. Error Condition - fatal, error message in R0 ; SHOULD NEVER HAPPEN ; 3. Hardware not in registry ; a. user cancelled, remove software if just installed ; THIS MAY HAPPEN ; b. all adapters previously installed ; THIS MAY HAPPEN ; 4. Success - just continue ; THIS MAY HAPPEN ; ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R0) != "NO_ERROR" goto fatal endif ifstr(i) $(HARDWARE_PUT_IN_REGISTRY) == $(FALSE) ifstr(i) $(CommonStatus) == "STATUS_USERCANCEL" goto AbandonComponentsInRegistry endif set $R0 = "All "$(Option)" adapters already installed." goto fatal endif EndWait goto end ;------------------------------------------------------------------------ ; InstallMode = configure ; Came here straight from figuring out which platform we are on. ; Option, SrcDir, AddCopy, DoCopy, and DoConfig are valid. ; ; The whole purpose of this to to reconfigure ConnectionType. ; ; Get a registry key (KeyProduct). ; Get the hardware parameter key (KeyParameters). ; Find the ConnectionType parameter location. ; Put up the dialog box to get the new ConnectionType. ; Write the new ConnectionType to the registry. ; configureadapter = + ; ; Can't configure if it wasn't previously installed! ; Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase) set $R0 = "Cannot configure "$(Option)" - product not in registry" goto fatal endif ; ; Open the registry key to this product. ; OpenRegKey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) == $(KeyNull) Set $R0 = "Cannot find "$(ProductSoftwareName)" Service for "$(Option) Goto fatal Endif ; ; FindService returns: R0 RegistryErrorIndex ; R1 KeyThisService ; R2 KeyParameters ; Shell $(UtilityInf) FindService, $(KeyProduct) CloseRegKey $(KeyProduct) Ifint $($ShellCode) != $(!SHELL_CODE_OK) Goto ShellCodeError Endif ifstr(i) $($R0) != "NO_ERROR" Goto fatal endif CloseRegKey $($R1) set KeyParameters = $($R2) Ifstr $(KeyParameters) == $(KeyNull) set $R0 = "Cannot find service for "$(Option) goto fatal endif ; ; Read the parameters from the registry which are changeable from ; the dialog box ; EnumRegValue $(KeyParameters) ValueList ForListDo $(ValueList) set ValueItem = $($) set ValueName = *($(ValueItem),1) set ValueData = *($(ValueItem),4) Ifstr(i) $(ValueName) == "Media" set MediaValue = $(ValueData) else-Ifstr(i) $(ValueName) == "TX_Threshold" set TXThresholdValue = $(ValueData) endif EndForListDo ; ; Initialize the variables we need to feed into the dialog ; set Combo1Out = *(^(MediaChoices$(Option),1),~(^(MediaChoices$(Option),2),$(MediaValue))) set Combo2Out = *(^(TXThresholdChoices$(Option),1),~(^(TXThresholdChoices$(Option),2),$(TXThresholdValue))) read-syms FileDependentDlg$(!STF_LANGUAGE) ; ; Load the library containing the DLL ; LoadLibrary "Disk 1" $(!STF_WINDOWSSYSPATH)"\"$(DialogDllName) hLib ; ; Display the dialog box and free the library after completion ; ui start "InputDlg" $(hLib) ui pop 1 FreeLibrary $(hLib) ifstr(i) $(DLGEVENT) != "CONTINUE" set CommonStatus = STATUS_USERCANCEL CloseRegKey $(KeyParameters) goto end endif ; ; Determine the values set in the dialog ; set MediaValue = *(^(MediaChoices$(Option),2),~(^(MediaChoices$(Option),1),$(Combo1Out))) set ThresholdValue = *(^(TXThresholdChoices$(Option),2),~(^(TXThresholdChoices$(Option),1),$(Combo2Out))) ; ; Write the new values to the registry ; set NewValueList = {{Media,$(NoTitle),$(!REG_VT_DWORD),$(MediaValue)},+ {TX_Threshold,$(NoTitle),$(!REG_VT_DWORD),$(TXThresholdValue)}} Shell $(UtilityInf), AddValueList, $(KeyParameters), $(NewValueList) CloseRegKey $(KeyParameters) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif goto end ;------------------------------------------------------------------------ ; Binding adapter not supported. ; Option, SrcDir, AddCopy, DoCopy, and DoConfig are valid. ; bindingadapter =+ set $R0 = "Binding: not implemented." goto fatal ;------------------------------------------------------------------------ ; Remove adapter. ; Option, SrcDir, AddCopy, DoCopy, and DoConfig are valid. ; ; All references to the adapter are to be deleted from the registry. ; Does NOT delete files. ; ; If ProductKeyName is the registry base, ; remove the software component. ; Otherwise, remove the hardware component. ; ; If it is the hardware component that is being removed, the NTN_RegBase ; will be: SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\# ; where # will the be DE450_# of the card to be removed. If the # is 1, ; while you are off doing RemoveHardwareComponent, RemoveSoftwareComponent ; will be called before control is returned to this .INF file. ; ; In theory, RemoveSoftwareComponent should never be called by this ; .INF file because it is done automatically when #1 is removed. ; removeadapter = + Ifstr(i) $(ProductKeyName) == $(!NTN_RegBase) Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), + $(ProductSoftwareName) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error removing software component." goto fatal endif else Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), + $(ProductSoftwareName), $(!NTN_RegBase) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto ShellCodeError endif ifstr(i) $($R0) != "NO_ERROR" set $R0 = "Error removing hardware component." goto fatal endif endif goto end ;------------------------------------------------------------------------ ; Upgrade software. ; Came here straight from figuring out which platform we are on. ; Option, SrcDir, AddCopy, DoCopy, and DoConfig are valid. ; ; If product exists in registry, copy help file and drivers. ; ; If this is implemented, also have to make sure all installed cards ; are supported by this .INF file (see [Options]). Then need to update ; hardware parameters of the options. ; UpgradeSoftware = + ;------------------------------------------------------------------- ; Get the NT version (3.50 or ...) ;------------------------------------------------------------------- OpenRegKey $(!REG_H_LOCAL) "" $(VersionKeyName) $(MAXIMUM_ALLOWED) KeyVersion GetRegValue $(KeyVersion),"CurrentVersion",VersionStruct CloseRegKey $(KeyVersion) Set NTVersion = *($(VersionStruct),4) Ifstr(i) $(NTVersion) == "3.50" set $R0 = "Windows NT 3.50 not supported on this distribution." goto fatal endif ;------------------------------------------------------------------- ; Determine the platform and set the correct driver/help paths. ;------------------------------------------------------------------- set Help_Directory = "WINNT" Ifstr $(!STF_PLATFORM) == "Alpha" set Source_Directory = "WINNT\ALPHA" else-ifstr $(!STF_PLATFORM) == "Mips" set Source_Directory = "WINNT\MIPS" else-ifstr $(!STF_PLATFORM) == "I386" set Source_Directory = "WINNT\INTEL" else-ifstr $(!STF_PLATFORM) == "ppc" set Source_Directory = "WINNT\PPC" else set $R0 = "This platform is not recognized and not supported by this distribution." goto fatal endif ;--------------------------------------------------------------- ; Make sure product exists in the registry ;--------------------------------------------------------------- OpenRegKey $(!REG_H_LOCAL) "" $(ProductKeyName) $(MAXIMUM_ALLOWED) KeyProduct Ifstr $(KeyProduct) != $(KeyNull) ;--------------------------------- ; Get the name of the INF file ;--------------------------------- Shell $(UtilityInf), GetInfFileNameFromRegistry, $(KeyProduct) ifint $($ShellCode) != $(!SHELL_CODE_OK) Debug-Output "ShellCode error" goto ShellCodeError endif set !UG_Filename = $($R0) ;--------------------------------- ; Copy the files if newer ;--------------------------------- install "Install-Update" ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS goto fatal endif ;----------------------------- ; Update the Version Number ;----------------------------- SetRegValue $(KeyProduct) {MajorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMajorVersion)} SetRegValue $(KeyProduct) {MinorVersion,$(NoTitle),$(!REG_VT_SZ),$(ProductMinorVersion)} CloseRegKey $(KeyProduct) else set $R0 = "Upgrade not supported for the installed driver version." goto fatal endif goto end ;------------------------------------------------------------------------ ; Shell Code Error. ; ShellCodeError = + set $R0 = "SHELL_CODE_ERROR" goto fatal ;------------------------------------------------------------------------ ; Fatal. ; ; Message to be displayed is in R0. ; fatal = + ; ; Set up status failed indicator. ; set CommonStatus = STATUS_FAILED ; ; Print the fatal error message, contained in $R0. ; Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $($R0) goto AbandonComponentsInRegistry ;------------------------------------------------------------------------ ; AbandonComponentsInRegistry. ; ; No message to be displayed. ; AbandonComponentsInRegistry = + Ifint $(HARDWARE_PUT_IN_REGISTRY) == $(TRUE) ; ; Remove hardware components listed in HWList. ; Since we only allow installation of one component, there will ; be only one component to remove. RemoveHardwareComponent will ; automatically remove the software component if this is the only ; hardware component, so we don't need to worry about removing ; the software component from here. ; Shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), + $(ProductSoftwareName), $(HWList) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto AbandonError endif ifstr(i) $($R0) != "NO_ERROR" goto AbandonError endif else-Ifstr(i) $(SOFTWARE_PUT_IN_REGISTRY) == $(TRUE) ; ; If SOFTWARE_PUT_IN_REGISTRY is true, remove software component. ; We only need to do this if the hardware component was not removed. ; Shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), + $(ProductSoftwareName), $(FALSE) ifint $($ShellCode) != $(!SHELL_CODE_OK) goto AbandonError endif ifstr(i) $($R0) != "NO_ERROR" goto AbandonError endif endif goto end AbandonError = + set $R0 = "Couldn't remove registry components. Registry may be corrupt." Shell $(subroutineinf) SetupMessage, $(!STF_LANGUAGE), "FATAL", $($R0) goto end ;------------------------------------------------------------------------ ; End. ; end = + Return $(CommonStatus) ;*********************** ;* INSTALL SUBROUTINES * ;*********************** [Install-AddList] set !STF_VITAL = 1 AddSectionFilesToCopyList Files-Sys $(SrcDir)$(Source_Directory) $(!STF_WINDOWSSYSPATH)\drivers AddSectionFilesToCopyList Files-Hlp $(SrcDir)$(Help_Directory) $(!STF_WINDOWSSYSPATH) AddSectionFIlesToCopyList Files-Dll $(SrcDir)$(Source_Directory) $(!STF_WINDOWSSYSPATH) Exit [Install-Update] set STF_VITAL = "" set STF_OVERWRITE = "VERIFYSOURCEOLDER" AddSectionFilesToCopyList Files-Inf $(SrcDir) $(!STF_WINDOWSSYSPATH) AddSectionFilesToCopyList Files-Sys $(SrcDir)$(Source_Directory) $(!STF_WINDOWSSYSPATH)\drivers AddSectionFilesToCopyList Files-Hlp $(SrcDir)$(Help_Directory) $(!STF_WINDOWSSYSPATH) AddSectionFIlesToCopyList Files-Dll $(SrcDir)$(Source_Directory) $(!STF_WINDOWSSYSPATH) set !STF_NCPA_FLUSH_COPYLIST = TRUE CopyFilesInCopyList Exit [Install-CopyList] set !STF_VITAL = 1 set !STF_NCPA_FLUSH_COPYLIST = $(TRUE) CopyFilesInCopyList Exit ;***************************** ;* SOURCE MEDIA DESCRIPTIONS * ;***************************** ; ; This section is required. Format is as follows: ; LineKey = (DiskDescription, TAGFILE = TagFileName) ; ; LineKey An integer (1-999) that identifies the line for ; later use. Must be consecutive, starting with 1. ; ; DiskDescription Disk name string prompting the user to insert ; the disk. ; ; TagFileName Specifies the name of the file whose presence ; on the disk indicates to Setup that the correct ; disk has been inserted. Whitespace must ; surround the "=". ; [Source Media Descriptions] 1 = "Digital DE450 Driver", TAGFILE = DISK1 ; ; Info needed for AddSectionFilesToCopyList ; Format: DiskID, FileName, Option ; ; DiskID is an integer defined in Source Media Descriptions ; [Files-Hlp] 1,DE450.HL_, SIZE=999, DECOMPRESS, RENAME=DE450.HLP [Files-Sys] 1,DE450.SY_ , SIZE=40000, DECOMPRESS, RENAME=DE450.SYS [Files-Dll] 1,DE450.DL_ , SIZE=2000, DECOMPRESS, RENAME=DE450.DLL [Files-Inf] 1,OEMSETUP.INF, SIZE=1000, RENAME=$(!UG_Filename) ;*************** ;* DEFINITIONS * ;*************** [LanguagesSupported] ENG [OptionsTextENG] DE450 = "DEC DE450 EtherWORKS Turbo PCI 10" [FileConstantsENG] DialogDllName = "de450.dll" ProductSoftwareDescription = "DEC DE450 Driver" FunctionDE450Title = "DEC DE450 Adapter Setup" ProductHardwareDE450Description = "DEC DE450 EtherWORKS Turbo PCI 10 Adapter" ConnectionList = ^(ConnectionChoices$(Option), 1) ConnectionValues = ^(ConnectionChoices$(Option), 2) NoList = ^(NoChoices, 1) NoValues = ^(NoChoices, 2) ;************************** ;* DIALOG BOX INFORMATION * ;************************** [DialogConstantsENG] Help = "&Help" Exit = "Cancel" OK = "OK" Continue = "Continue" Cancel = "Cancel" [FileDependentDlgENG] DlgTemplate = "DE450" DlgType = "RadioCombination" Caption = $(Function$(Option)Title) Combo1 = "Media Type" Combo2 = "Transmit Threshold" NotifyFields = {"NO","NO"} Combo1List = ^(MediaChoices$(Option),1) Combo2List = ^(TXThresholdChoices$(Option),1) ComboListItemsIn = {Combo1List,Combo2List} ComboListItemsOut = {Combo1Out,Combo2Out} EditTextLim = {"",""} EditTextIn = {"",""} MinHelpId = 1 MaxHelpId = 10 HelpContext = $(Help$(Option)Id)