; 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)Download Driver Pack
After your driver has been downloaded, follow these simple steps to install it.
Expand the archive file (if the download file is in zip or rar format).
If the expanded file has an .exe extension, double click it and follow the installation instructions.
Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.
Find the device and model you want to update in the device list.
Double-click on it to open the Properties dialog box.
From the Properties dialog box, select the Driver tab.
Click the Update Driver button, then follow the instructions.
Very important: You must reboot your system to ensure that any driver updates have taken effect.
For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.