; OEMSETUP FILE FOR EtherWORKS TURBO PCI/EISA Adapters
; WNT V3.51 and V4.0 - DE500.SYS V1.13
;
; Platform type : ALPHA, Ix86, MIPs, PPC
; Supported Adapters: DE500
;
; 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 (DE500). 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]
DE500
;***************************
;* CONNECTION TYPE CHOICES *
;***************************
[MediaChoicesDE500]
Media_0 = "AutoSense", 0
Media_1 = "10 Mbps-Half Duplex", 1
Media_2 = "100 Mbps-Half Duplex", 2
Media_3 = "10 Mbps-Full Duplex", 3
Media_4 = "100 Mbps-Full Duplex", 4
;******************************
;* TRANSMIT THRESHOLD CHOICES *
;******************************
[TXThresholdChoicesDE500]
TXThreshold_0 = "72/128", 0
TXThreshold_1 = "96/256", 1
TXThreshold_2 = "128/512", 2
TXThreshold_3 = "160/1024", 3
;****************************
;* DEFINITIONS USED IN CODE *
;****************************
[FileConstants]
UtilityInf = "UTILITY.INF"
subroutineinf = "SUBROUTN.INF"
SoftwareType = "driver"
NetEventDLL = "%SystemRoot%\System32\netevent.dll"
Manufacturer = "DigitalEquipmentCorporation"
ProductMajorVersion = "1"
ProductMinorVersion = "13"
ProductVersion = $(ProductMajorVersion)"."$(ProductMinorVersion)
VendorID = 4113 ;; 1011 (DEC)
;
; Software Specific Information Below.
;
ProductSoftwareName = "DE500_" ; current driver name
ProductSoftwareTitle = "DEC DE500 Adapter Driver"
ProductSoftwareImagePath = "%SystemRoot%\System32\drivers\DE500.sys"
NetRuleSoftwareType = "DE500Sys ndisDriver DE500Driver"
NetRuleSoftwareUse = $(SoftwareType)
NetRuleSoftwareBindForm = """DE500Sys"" yes no container"
NetRuleSoftwareClass = {"DE500Driver basic"}
NetRuleSoftwareSWBindable = {"DE500Driver DE500Adapter non exclusive 100"}
OptionHelpFile = "DE500.HLP"
ProductHardwareName = "DE500_"
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!
;
; DE500 Information
ProductHardwareDE500Title = "DEC DE500 Fast EtherWORKS PCI 10/100 Adapter"
NetRuleHardwareDE500Type = "DE500 DE500Adapter"
NetRuleHardwareDE500Class = {"DE500Adapter basic"}
HelpDE500Id = 1
21140CFID = 593937 ;; 0x00021011
21143CFID = 1642513 ;; 0x00191011
DE500HardwareParamList = {{BusType,$(NoTitle),$(!REG_VT_DWORD),$(PCIBusType)},+
{MediaType,$(NoTitle),$(!REG_VT_DWORD),1}}
NetRuleHardwareBindForm = " yes yes container"
ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(ProductSoftwareName)"\CurrentVersion"
DE500ProductKeyName = $(!NTN_SoftwareBase)"\"$(Manufacturer)"\"$(DE500ProductSoftwareName)"\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 (DE500)
; 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 DE500 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.
; We will do this twice and merge the lists, once for the 21140 chip
; and once for the 21143 chip.
;
;
; **** Get Adapter List for the 21140 chip ****
;
; Shift CFID to get device ID for 21140
;
set-div DeviceID = $(21140CFID) 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)
; **** Get Adapter List for the 21143 chip ****
;
; Shift CFID to get device ID for 21140
;
set-div DeviceID = $(21143CFID) 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 AdapterList2 = $($R0)
;
; Now merge the adapter lists for the 2 adapters
;
ForListDo $(AdapterList2)
set AdapterList = >($(AdapterList),{*($($),1),*($($),2),*($($),3)})
EndForListDo
Debug-Output "Adapter List:"$(AdapterList)
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 ParamStore_and_Forward = 1
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, Store_and_Forward
; Hardware parameters defined as constants
; BusNumber, SlotNumber, FunctionNumber
;
set NewValueList = {{Media,$(NoTitle),$(!REG_VT_DWORD),$(ParamMedia)},+
{TX_Threshold,$(NoTitle),$(!REG_VT_DWORD),$(ParamTX_Threshold)},+
{Store_and_Forward,$(NoTitle),$(!REG_VT_DWORD),$(ParamStore_and_Forward)}}
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) == "Store_and_Forward"
set StoreandForwardValue = $(ValueData)
else-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
;
Ifstr(i) $(StoreandForwardValue) == "1"
set RadioIn = {1}
else-Ifstr(i) $(StoreandForwardValue) == "0"
set RadioIn = {2}
endif
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 TXThresholdValue = *(^(TXThresholdChoices$(Option),2),~(^(TXThresholdChoices$(Option),1),$(Combo2Out)))
IfContains "1" IN $(RadioOut)
set StoreandForwardValue = 1
else
set StoreandForwardValue = 0
endif
;
; Write the new values to the registry
;
set NewValueList = {{Media,$(NoTitle),$(!REG_VT_DWORD),$(MediaValue)},+
{TX_Threshold,$(NoTitle),$(!REG_VT_DWORD),$(TXThresholdValue)},+
{Store_and_Forward,$(NoTitle),$(!REG_VT_DWORD),$(StoreandForwardValue)}}
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 DE500_# 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 DE500 Driver", TAGFILE = DISK1
;
; Info needed for AddSectionFilesToCopyList
; Format: DiskID, FileName, Option
;
; DiskID is an integer defined in Source Media Descriptions
;
[Files-Hlp]
1,DE500.HL_, SIZE=999, DECOMPRESS, RENAME=DE500.HLP
[Files-Sys]
1,DE500.SY_ , SIZE=40000, DECOMPRESS, RENAME=DE500.SYS
[Files-Dll]
1,DE500.DL_ , SIZE=2000, DECOMPRESS, RENAME=DE500.DLL
[Files-Inf]
1,OEMSETUP.INF, SIZE=1000, RENAME=$(!UG_Filename)
;***************
;* DEFINITIONS *
;***************
[LanguagesSupported]
ENG
[OptionsTextENG]
DE500 = "DEC DE500 Fast EtherWORKS PCI 10/100"
[FileConstantsENG]
DialogDllName = "de500.dll"
ProductSoftwareDescription = "DEC DE500 Driver"
FunctionDE500Title = "DEC DE500 Adapter Setup"
ProductHardwareDE500Description = "DEC DE500 Fast EtherWORKS PCI 10/100 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 = "DE500"
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.