oemsetup.inf Driver File Contents (BCM4401_NP01.zip)

;*******************************************************************************
; Module Description:
;    Oemsetup.inf for  Broadcom 440x 10/100 Integrated Controller
;
; History:
;    06/03/00 Hav Khauv         Inception.
;*******************************************************************************

[Identification]
    OptionType = NetAdapter

[Options]
    BCM4SBE4


[PlatformsSupported]
    PCI


[LanguagesSupported]
    ENG, English


[SpeedAndDuplexBCM4SBE4]
    "Auto",                                 0
    "10 Mb Half",                           1
    "10 Mb Full",                           2
    "100 Mb Half",                          3
    "100 Mb Full",                          4


[FlowControlCapBCM4SBE4]
    "Enable",                             2
    "Disable",                              0

[OptionsTextENG]
    BCM4SBE4 = "Broadcom 440x 10/100 Integrated Controller"


[FileConstants]
    UtilityInf      = "UTILITY.INF"
    SubroutineInf   = "SUBROUTN.INF"

    MAXIMUM_ALLOWED = 33554432
    NoTitle         = 0

    Manufacturer        = "Broadcom"
    ProductMajorVersion = "4"
    ProductMinorVersion = "28"
    ProductVersion      = $(ProductMajorVersion)"."$(ProductMinorVersion)

    NetEventDll              = "%SystemRoot%\System32\netevent.dll;%SystemRoot%\System32\drivers\bcm4sbe4.sys"
    ProductSoftwareImagePath = "\SystemRoot\System32\drivers\bcm4sbe4.sys"
    dtect44xxDll              = "dtect44x.dll"

    MiniportProductName              = "bcm4sbe4"
    MiniportProductKeyName           = $(!NTN_SoftwareBase)"\"$(Manufacturer)+
                                       "\"$(MiniportProductName)+
                                       "\CurrentVersion"
    MiniportSoftwareType             = "driver"

    MiniportNetRuleSoftwareUse       = $(MiniportSoftwareType)
    MiniportNetRuleSoftwareClass     = {"BCM4SBE4Driver basic"}
    MiniportNetRuleSoftwareType      = "BCM4SBE4Sys ndisDriver BCM4SBE4Driver"
    MiniportNetRuleSoftwareBindForm  = """BCM4SBE4Sys"" yes no container"
    MiniportNetRuleSoftwareBindable  = {"BCM4SBE4Driver BCM4SBE4Adapter non "+
                                        "exclusive 100"}

    MiniportNetRuleHardwareType      = "BCM4SBE4 BCM4SBE4Adapter"
    MiniportNetRuleHardwareBindForm  = " yes yes container"
    MiniportNetRuleHardwareClass     = {"BCM4SBE4Adapter basic"}

    ServiceKeyName                   = "SYSTEM\CurrentControlSet\Services"

    BCM4SBE4HelpId                     = 100
    BCM4SBE4HelpFile                   = "bcm4sbe4.hlp"


[FileConstantsENG]
    FunctionBCM4SBE4Title = "Broadcom 440x 10/100 Integrated Controller"

    MiniportProductSoftwareTitle       = $(FunctionBCM4SBE4Title)
    MiniportProductSoftwareDisplayName = "Broadcom 440x 10/100 Integrated Controller"

    MiniportBCM4SBE4HardwareTitle = "Broadcom 440x 10/100 Integrated Controller"
    MiniportBCM4SBE4Description   = "Broadcom 440x 10/100 Integrated Controller   NDIS 4.0 Driver "+
        " Version "$(ProductVersion)"."

    MsgShellErrorTitle  = "Error: "$(Function$(OptionId)Title)
    MsgShellErrorText   = "Shell Code Error."
    MsgRegistryKeyDoesNotExist = "Open registry key failed."
    MsgNoAdapterFound = "Network card is not present in the system."
    MsgDowngrade = "Cannot downgrade to an older driver.  To downgrade, "+
        "you must uninstall first and then re-install the older driver."
    MsgUpdateDone = "Driver update will take effect on the next reboot."
    MsgCannotFinddtect44xxDll = "Cannot load dtect44x.dll file."


[DialogConstantsENG]
    Help        = "&Help"
    Exit        = "C&ancel"
    OK          = "&OK"
    HelpContext = ""
    Continue    = "&Continue"
    Cancel      = "C&ancel"


[SpeedAndDuplexDlgENG]
    DlgText     = "Select the line speed and duplex mode to connect "+
                  "to the network.  The recommended selection is 'Auto' "+
                  "which sets up the adapter to auto detect the optimal "+
                  "connection."
    DlgTemplate = "NE2000"
    DlgType     = "Combination"
    Caption     = "Configurable Driver Parameters."
    Label1 = "&Speed && Duplex:"
    Label2 = "&Flow Control:"
    Combo1List  = $(ConnectionList)
    Combo1Out   = $(ConnectionValue)
    Combo2List  = $(FlowControlCapList)
    Combo2Out   = $(FlowControlCapValue)
    ComboListItemsIn  = { Combo1List, Combo2List } 
    ComboListItemsOut = { Combo1Out, Combo2Out } 
    EditTextLim = ""
    CBOptionsGreyed = {}
    MinHelpId = 100
    MaxHelpId = 1000
    HelpContext = $($(OptionId)HelpId)


[DebugControl]
    !DebugOutputControl = 0


[CurrentDate]
    Now = {} ? $(!LIBHANDLE) GetSystemDate


[Source Media Descriptions]
    1 = "Broadcom Driver Installation Disk", TAGFILE = bcm4sbe4.sys


[Files-BCM4SBE4Driver]
    1, bcm4sbe4.sys, SIZE=999


[Files-BCM4SBE4Help]
    1, bcm4sbe4.hlp, SIZE=999


[Files-Other]
    1, dtect44x.dll, SIZE=65



;*******************************************************************************
; Description:
;    
; Input:
;    None.
;
; Output:
;    None.
;*******************************************************************************
[OemDriverInfo]
    ; Driver Information Entries
    ; These items will be set by IHV...
    Set DriverMfgr = "Broadcom"                   ; IHV name
    Set DriverVersionID = "2.5"                  ; The IHV driver package version
    Set BaseDriverFileVersion = $(ProductVersion) ; Version in Key file
    Set BaseDriverFileName = "bcm4sbe4.sys"         ; Key file for version check

    ; These items will be set to VENDOR values, and then set to OEM-specific by OEM
    Set DriverOEM = "Broadcom"                                          ; name of the OEM
    Set DriverFamily = "NIC"                                        ; device family (NIC, Storage, Video...)
    Set DriverProduct = "4401"                                   ; Specific Name of device (chipset, for example)
    Set DriverDescription = "Broadcom 440x 10/100 Integrated Controller"  ; Description of device (product name, OS or system supported)
    Set DriverOEMVersion = "A00"                                    ; OEM-specified version

    ; This section is added to all INFs to add registry entries for Driver Info.
    set DriverInfoRegList = { "InstalledOptions",$(DriverOEM),$(DriverFamily),$(DriverMfgr),$(DriverProduct) }
    set DriverInfoKey = "SOFTWARE"
    OpenRegKey $(!REG_H_LOCAL) "" $(DriverInfoKey) $(!REG_KEY_CREATE_SUB_KEY) DriverInfoOldKeyHandle
    ifstr $(DriverInfoOldKeyHandle) == ""
        shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "DriverInfo registry failed. Could not open HKLM\Software ("$(RegLastError)")"
        set DriverInfoFailed = "FAIL"
    else
        ForListDo $(DriverInfoRegList)
            Set NewDriverInfoKey = $(DriverInfoKey)"\"$($)
            OpenRegKey $(!REG_H_LOCAL) "" $(NewDriverInfoKey) $(!REG_KEY_ALL_ACCESS) DriverInfoKeyHandle
            ifstr(i) $(DriverInfoKeyHandle) == ""
                CreateRegKey $(DriverInfoOldKeyHandle) {$($),0,GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" DriverInfoKeyHandle
                ifstr $(DriverInfoKeyHandle) == ""
                    shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "NONFATAL" "DriverInfo registry failed. Could not create key:"$($)" ("$(RegLastError)")"
                    set DriverInfoFailed = "FAIL"
                endif
            endif
            CloseRegKey $(DriverInfoOldKeyHandle)
            set DriverInfoOldKeyHandle = $(DriverInfoKeyHandle)
            set DriverInfoKey = $(NewDriverInfoKey)
        EndForListDo
    endif

    ifstr $(DriverInfoFailed) != "FAIL"
        SetRegValue $(DriverInfoKeyHandle) {"Description",0,$(!REG_VT_SZ),$(DriverDescription)}
        SetRegValue $(DriverInfoKeyHandle) {"CurrentVer",0,$(!REG_VT_SZ),$(DriverOEMVersion)}
        SetRegValue $(DriverInfoKeyHandle) {"Ver_"$(DriverOEMVersion),0,$(!REG_VT_SZ),$(DriverVersionID)}
        SetRegValue $(DriverInfoKeyHandle) {"BaseDriverFileName",0,$(!REG_VT_SZ),$( BaseDriverFileName)}
        SetRegValue $(DriverInfoKeyHandle) {"BaseDriverFileVersion",0,$(!REG_VT_SZ),$(BaseDriverFileVersion)}

        CloseRegKey $(DriverInfoKeyHandle)
    endif

    return






;*******************************************************************************
; Description:
;    
; Input:
;    None.
;
; Output:
;    None.
;*******************************************************************************
[ShowShellErrorMessage]
    read-syms DebugControl
    debug-output "### ShowShellErrorMessage"

    read-syms FileConstants
    read-syms FileConstants$(!STF_LANGUAGE)

    set DlgType      = "MessageBox"
    set STF_MB_TITLE = $(MsgShellErrorTitle)
    set STF_MB_TEXT  = $(MsgShellErrorText)
    set STF_MB_TYPE  = 1
    set STF_MB_ICON  = 3
    set STF_MB_DEF   = 1

    ui start "Error Message"

    return



;*******************************************************************************
; Description:
;    
; Input:
;    $($0) = "WARNING", "FATAL", "NONFATAL", or "STATUS"
;    $($1) = Registery fatal text code.
;
; Output:
;    STATUS_FAILED
;    STATUS_SUCCESSFUL
;*******************************************************************************
[ShowRegistryErrorMessage]
    read-syms DebugControl
    debug-output "### ShowRegistryErrorMessage"

    read-syms FileConstants
    read-syms FileConstants$(!STF_LANGUAGE)

    set Severity = $($0)
    set RegStrCode = $($1)

    shell $(UtilityInf) RegistryErrorString $(RegStrCode)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        shell "" ShowShellErrorMessage
        return STATUS_FAILED
    endif

    set RegText = $($R0)

    shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) $(Severity) $(RegText)

    return STATUS_SUCCESSFUL



;*******************************************************************************
; Description:
;    Displays shell error message.
;    
; Input:
;    $($0) = "WARNING", "FATAL", "NONFATAL", or "STATUS"
;    $($1) = Fatal text string.
;
; Output:
;    None.
;*******************************************************************************
[ShowErrorMessage]
    read-syms DebugControl
    debug-output "### ShowErrorMessage"

    read-syms FileConstants

    shell $(SubroutineInf) SetupMessage $(!STF_LANGUAGE) $($0) $($1)
    ifint $($ShellCode) != $(!SHELL_CODE_OK)
        shell "" ShowShellErrorMessage
    endif

    return



;*******************************************************************************
; Description:
;    
; Input:
;
; Output:
;*******************************************************************************
[Install-Help]
    debug-output "### Install-Help"

    set STF_VITAL = ""
    set STF_OVERWRITE = "VERIFYSOURCEOLDER"

    AddSectionFilesToCopyList Files-$(OptionId)Help $(SrcDir) +
        $(!STF_WINDOWSSYSPATH)

    set !STF_OVERWRITE = TRUE
    set !STF_NCPA_FLUSH_COPYLIST = TRUE

    CopyFilesInCopyList

    exit



;*******************************************************************************
; Description:
;    
; Input:
;
; Output:
;*******************************************************************************
[Install-Update]
    debug-output "### Install-Update"

    set STF_VITAL     = ""
    set STF_OVERWRITE = "VERIFYSOURCEOLDER"

    AddSectionFilesToCopyList Files-$(OptionId)Driver $(SrcDir) +
        $(!STF_WINDOWSSYSPATH)\drivers
    AddSectionFilesToCopyList Files-$(OptionId)Help $(SrcDir) +
        $(!STF_WINDOWSSYSPATH)

    set !STF_NCPA_FLUSH_COPYLIST = TRUE

    CopyFilesInCopyList

    exit



;*******************************************************************************
; Description:
;    
; Input:
;    None.
;
; Output:
;    None.
;*******************************************************************************
[Install-Option]
    debug-output "### Install-Option"

    ; Copy files.
    set STF_VITAL = ""
    ifstr(i) $(AddCopy) == "YES"
        debug-output "Add driver file to copy list."
        AddSectionFilesToCopyList Files-$(OptionId)Driver $(SrcDir) +
            $(!STF_WINDOWSSYSPATH)\drivers
    endif

    ifstr(i) $(DoCopy) == "YES"
        debug-output "copy files in copy list."
        set !STF_NCPA_FLUSH_COPYLIST = TRUE
        CopyFilesInCopyList
    endif

    exit



;*******************************************************************************
; Description:
;    
; Input:
;    None.
;
; Output:
;    $($R0): STATUS: STATUS_SUCCESSFUL
;    $($R1): Option Type (COMPUTER ...)
;    $($R2): Diskette description
;*******************************************************************************
[Identify]
    read-syms DebugControl
    debug-output "### Identify"

    read-syms Identification

    set Status     = STATUS_SUCCESSFUL
    set Identifier = $(OptionType)
    set Media      = #("Source Media Descriptions", 1, 1)

    return $(Status) $(Identifier) $(Media)



;*******************************************************************************
; Description:
;
; Input:
;    $($0):  Language used.  (ENG|FRN|...)
;
; Output:
;    $($R0): STATUS: STATUS_SUCCESSFUL
;                    STATUS_NOLANGUAGE
;                    STATUS_FAILED
;                    STATUS_NOTSUPPORTED
;
;    $($R1): Option List
;    $($R2): Option Text List
;*******************************************************************************
[ReturnOptions]
    read-syms DebugControl
    debug-output "### ReturnOptions"

    set OptionList     = {}
    set OptionTextList = {}
    set LanguageList   = ^(LanguagesSupported, 1)

    ifcontains(i) $($0) in $(LanguageList)
        set Status         = STATUS_SUCCESSFUL
        set OptionList     = ^(Options, 1)
        set OptionTextList = ^(OptionsText$($0), 1)

        ifstr(i) $($1) != ""
            set PlatformList = ^(PlatformsSupported, 1)
            ifcontains(i) $($1) not-in $(PlatformList)
                debug-output "Unknown platform:  "$($1)
                set Status = STATUS_NOLANGUAGE
            endif
        endif
    else
        debug-output "Language not supported."
        set Status = STATUS_NOLANGUAGE
    endif

    return $(Status) $(OptionList) $(OptionTextList)



;*******************************************************************************
; Description:
;    This section performs the following tasks:
;       Copy files representing Options.
;       Configure the installed option.
;       Update the registry for the installed option
;
; Input:
;    $($0):  Language to use
;    $($1):  OptionID to install
;    $($2):  SourceDirectory
;    $($3):  AddCopy  (YES | NO)
;    $($4):  DoCopy   (YES | NO)
;    $($5):  DoConfig (YES | NO)
;
; Output:
;    $($R0): STATUS: STATUS_SUCCESSFUL |
;                    STATUS_NOLANGUAGE |
;                    STATUS_USERCANCEL |
;                    STATUS_FAILED
;*******************************************************************************
[InstallOption]
    read-syms DebugControl
    debug-output "### InstallOption"

    Set LanguageList = ^(LanguagesSupported, 1)
    ifcontains(i) $($0) not-in $(LanguageList)
        return STATUS_NOLANGUAGE
    endif

    set OptionId = $($1)
    set SrcDir = $($2)

    read-syms FileConstants$(!STF_LANGUAGE)
    read-syms FileConstants

    set-title $(Function$(OptionId)Title)

    ifstr(i) $(!NTN_InstallMode) == Deinstall
        shell "" RemoveSection $(OptionId)
    else-ifstr(i) $(!NTN_InstallMode) == Update
        shell "" UpdateSection $(OptionId) $(SrcDir)
    else-ifstr(i) $(!NTN_InstallMode) == Bind
        shell "" BindSection $(OptionId)
    else-ifstr(i) $(!NTN_InstallMode) == Configure
        shell "" ConfigureSection $(OptionId)
    else
        startwait
        shell "" InstallSection $($1) $($2) $($3) $($4) $($5)
        endwait

        ifstr(i) $($R0) != STATUS_SUCCESSFUL
            shell "" RemoveSection
            return STATUS_FAILED
        endif
    endif

    debug-output "Final status: "$($R0)

    return $($R0)



;*******************************************************************************
; Description:
;    
; Input:
;    $($0): OptionId
;
; Output:
;    $($R0) Status
;*******************************************************************************
[RemoveSection]
    read-syms DebugControl
    debug-output "### RemoveSection"

    set OptionId = $($0)

    read-syms FileConstants
    read-syms FileConstants$(!STF_LANGUAGE)

    ifstr(i) $(MiniportProductKeyName) == $(!NTN_RegBase)
        debug-output "Removing software component."
        shell $(UtilityInf), RemoveSoftwareComponent, $(Manufacturer), +
            $(MiniportProductName)
    else
        debug-output "Removing hardware component."
        shell $(UtilityInf), RemoveHardwareComponent, $(Manufacturer), +
            $(MiniportProductName), $(!NTN_RegBase)
    endif

    return STATUS_SUCCESSFUL



;*******************************************************************************
; Description:
;    
; Input:
;    $($0):  OptionId
;    $($1):  SourceDirectory
;
; Output:
;    $($R0) Status
;*******************************************************************************
[UpdateSection]
    read-syms DebugControl
    debug-output "### UpdateSection"

    set OptionId = $($0)
    set SrcDir = $($1)

    read-syms FileConstants
    read-syms FileConstants$(!STF_LANGUAGE)

    openregkey $(!REG_H_LOCAL) "" $(MiniportProductKeyName) $(MAXIMUM_ALLOWED) +
        ProductKey
    ifstr $(ProductKey) == ""
        debug-output "Cannot get registry key."
        shell "" ShowErrorMessage "FATAL" $(MsgRegistryKeyDoesNotExist)
        return STATUS_FAILED
    endif

    getregvalue $(ProductKey), "MajorVersion", VersionInfo
    set MajorVersion = *($(VersionInfo), 4)
    debug-output "Major version: "$(MajorVersion)
    getregvalue $(ProductKey), "MinorVersion", VersionInfo
    set MinorVersion = *($(VersionInfo), 4)
    debug-output "Minor version: "$(MinorVersion)

    set-mul OldVersion = $(MajorVersion), 1000
    set-add OldVersion = $(OldVersion), $(MinorVersion)

    set-mul NewVersion = $(ProductMajorVersion), 1000
    set-add NewVersion = $(NewVersion), $(ProductMinorVersion)

    ifint $(OldVersion) > $(NewVersion)
        debug-output "Oldversion: "$(OldVersion)",   NewVersion: "$(NewVersion)
        shell "" ShowErrorMessage "FATAL" $(MsgDowngrade)
        return STATUS_USERCANCEL
    endif

    install "Install-Update"

    setregvalue $(ProductKey) { MajorVersion, $(NoTitle), $(!REG_VT_SZ), +
        $(ProductMajorVersion) }
    setregvalue $(ProductKey) { MinorVersion, $(NoTitle), $(!REG_VT_SZ), +
        $(ProductMinorVersion) }

    closeregkey $(ProductKey)

    ; Enumerate all netcards installed of this type and update them
    set iSearch = 1     ; start of search.

    nextnetcard = +
        shell $(UtilityInf), FindNextNetworkCard, $(MiniportProductName), +
            $(iSearch)
        set KeyNetcard = $($R0)
        set iSearch = $($R1)

        ifstr $(KeyNetcard) != $(KeyNull)
            setregvalue $(KeyNetcard) { Description, $(NoTitle), +
                $(!REG_VT_SZ), $(Miniport$(OptionId)Description) }
            closeregkey $(KeyNetcard)
            goto nextnetcard
        Endif

    
    shell "" ShowErrorMessage "NONFATAL" $(MsgUpdateDone)

    return STATUS_SUCCESSFUL



;*******************************************************************************
; Description:
;    
; Input:
;    $($0):  OptionId
;
; Output:
;    $($R0) Status
;*******************************************************************************
[BindSection]
    read-syms DebugControl
    debug-output "### BindSection"

    set OptionId = $($0)

    return STATUS_SUCCESSFUL



;*******************************************************************************
; Description:
;    
; Input:
;    None
;
; Output:
;    None
;*******************************************************************************
[Install-OTHER]
    set STF_VITAL = ""
    set STF_OVERWRITE = "VERIFYSOURCEOLDER"
    AddSectionFilesToCopyList Files-Other $(SrcDir) $(!STF_WINDOWSSYSPATH)
    set !STF_NCPA_FLUSH_COPYLIST = TRUE
    CopyFilesInCopyList
    Exit



;*******************************************************************************
; Description:
;    
; Input:
;    None
;
; Output:
;    None
;*******************************************************************************
[Install-ChangeDefaults]
    debug-output "### Install-ChangeDefaults"

    ; BusNum, DeviceNum, and FunctionNum must be initialized before calling
    ; this section.

    ; Load dtect44xx dll so we can read PCI configuration registers mainly to
    ; get the PCI IDs.
    LoadLibrary $(MsgCannotFinddtect44xxDll) $(!STF_WINDOWSSYSPATH)"\"+
        $(dtect44xxDll) HwdtectDll

    ; Get subvendor ID.
    LibraryProcedure SVID $(HwdtectDll) dtectPortIo44xx "PciRd16" +
        $(BusNum) $(DeviceNum) $(FunctionNum) "0x2c"
    debug-output "SVID: "$(SVID)

    ; Get the subsystem id.
    LibraryProcedure SSID $(HwdtectDll) dtectPortIo44xx "PciRd16" +
        $(BusNum) $(DeviceNum) $(FunctionNum) "0x2e"
    debug-output "SSID: "$(SSID)

    set MiniportBCM4SBE4HardwareTitle  = "Broadcom 440x 10/100 Integrated Controller"
    set MiniportBCM4SBE4Description      = "Broadcom 440x 10/100 Integrated Controller "+
        " NDIS 4.0 Driver Version "$(ProductVersion)"."


    ; Change the title and description for OEMs.
    ifstr(i) $(SVID) == "0x1043"
        ifstr(i) $(SSID) == "0x80A8"
            set MiniportBCM4SBE4HardwareTitle  = "ASUSTeK/Broadcom 440x 10/100 Integrated Controller"
            set MiniportBCM4SBE4Description      = "ASUSTeK/Broadcom 440x 10/100 Integrated Controller "+
                "NDIS 4.0 Driver Version "$(ProductVersion)"."
        endif
    endif

    ifstr(i) $(SVID) == "0x1462"
        ifstr(i) $(SSID) == "0x585C"
            set MiniportBCM4SBE4HardwareTitle  = "MSI/Broadcom 440x 10/100 Integrated Controller"
            set MiniportBCM4SBE4Description      = "MSI/Broadcom 440x 10/100 Integrated Controller "+
                "NDIS 4.0 Driver Version "$(ProductVersion)"."
        endif
    endif

    ifstr(i) $(SVID) == "0x1462"
        ifstr(i) $(SSID) == "0x590C"
            set MiniportBCM4SBE4HardwareTitle  = "MSI/Broadcom 440x 10/100 Integrated Controller"
            set MiniportBCM4SBE4Description      = "MSI/Broadcom 440x 10/100 Integrated Controller "+
                "NDIS 4.0 Driver Version "$(ProductVersion)"."
        endif
    endif

    Exit



;*******************************************************************************
; Description:
;    
; Input:
;    $($0):  OptionId
;
; Output:
;    $($R0)  STATUS_FAILED or STATUS_SUCCESSFUL
;*******************************************************************************
[ConfigureSection]
    read-syms DebugControl
    debug-output "### ConfigureSection"

    set OptionId = $($0)

    read-syms FileConstants
    read-syms FileConstants$(!STF_LANGUAGE)

    openregkey $(!REG_H_LOCAL) "" $(!NTN_RegBase) $(MAXIMUM_ALLOWED) ProductKey
    ifstr $(ProductKey) == ""
        debug-output "Component not installed."
        shell "" ShowRegistryErrorMessage "FATAL" CANNOT_FIND_COMPONENT_SERVICE
        return STATUS_FAILED
    Endif

    shell $(UtilityInf) FindService $(ProductKey)
    ifstr(i) $($R0) != NO_ERROR
        debug-output "Canot not find the component."
        closeregkey $(ProductKey)
        shell "" ShowRegistryErrorMessage "FATAL" $($R0)
        return STATUS_FAILED
    endif

    closeregkey $($R1)
    closeregkey $(ProductKey)

    set ParameterKey = $($R2)

    ifstr $(ParameterKey) == ""
        shell "" ShowRegistryErrorMessage "FATAL" CANNOT_FIND_COMPONENT_SERVICE
        return STATUS_FAILED
    endif

    EnumRegValue $(ParameterKey) ValueList

    set ConnectionIndex = 0
    set FlowControlCapIndex = 0
    ForListDo $(ValueList)
        set ValueItem = $($)
        set ValueName = *($(ValueItem), 1)
        set ValueData = *($(ValueItem), 4)
        ifstr(i) $(ValueName) == "SpeedAndDuplex"
            set ConnectionIndex = $(ValueData)
        endif

        ifstr(i) $(ValueName) == "FlowControlCap"
            set FlowControlCapIndex = $(ValueData)
        endif

        ifstr(i) $(ValueName) == "BusNumber"
            set BusNum = $(ValueData)
        endif

        ifstr(i) $(ValueName) == "SlotNumber"
            set DeviceNum = $(ValueData)
        endif

        ifstr(i) $(ValueName) == "FunctionNumber"
            set FunctionNum = $(ValueData)
        endif
    EndForListDo

    set OldConnectionValue = $(ConnectionIndex)
    set OldFlowControlCapValue = $(FlowControlCapIndex)

    set ConnectionList = ^(SpeedAndDuplex$(OptionId), 1)
    set ConnectionValueList = ^(SpeedAndDuplex$(OptionId), 2)
    debug-output "ConnectionList: "$(ConnectionList)
    debug-output "ConnectionValueList: "$(ConnectionValueList)

    set FlowControlCapList = ^(FlowControlCap$(OptionId), 1)
    set FlowControlCapValueList = ^(FlowControlCap$(OptionId), 2)
    debug-output "FlowControlCapList: "$(FlowControlCapList)
    debug-output "FlowControlCapValueList: "$(FlowControlCapValueList)

    ; Get the bus, device, and function number are initialized above.
    install "Install-ChangeDefaults"
    debug-output "New connection list: "$(ConnectionList)
    debug-output "New connection value list: "$(ConnectionValueList)

    set ConnectionValue = *($(ConnectionList), ~($(ConnectionValueList), +
        $(ConnectionIndex)))
    ifstr(i) $(ConnectionValue) == ""
        set ConnectionValue = *($(ConnectionList), 1)
    endif

    set FlowControlCapValue = *($(FlowControlCapList), ~($(FlowControlCapValueList), +
        $(FlowControlCapIndex)))
    ifstr(i) $(FlowControlCapValue) == ""
        set FlowControlCapValue = *($(FlowControlCapList), 1)
    endif

    read-syms DialogConstants$(!STF_LANGUAGE)
    read-syms SpeedAndDuplexDlg$(!STF_LANGUAGE)

    debug-output "HelpContext = "$(HelpContext)
    sethelpfile $(!STF_WINDOWSSYSPATH)"\"$($(OptionId)HelpFile) +
        $(MinHelpId) $(MaxHelpId) $($(OptionId)HelpId)

    set ConnectionIndex = *($(ConnectionList), 1)
    set FlowControlCapIndex = *($(FlowControlCapList), 1)

    set RetStatus = STATUS_SUCCESSFUL

    ui start "Config"
    ifstr(i) $(DLGEVENT) == "CONTINUE"
        set ConnectionIndex = $(Combo1Out)
        set FlowControlCapIndex = $(Combo2Out)
    else-ifstr(i) $(DLGEVENT) == "BACK"
        set RetStatus = STATUS_USERCANCEL
    endif
    ui pop 1

    set NewConnectionValue = *($(ConnectionValueList), +
        ~($(ConnectionList), $(ConnectionIndex)))
    set NewFlowControlCapValue = *($(FlowControlCapValueList), +
        ~($(FlowControlCapList), $(FlowControlCapIndex)))
    debug-output "New Connection value = "$(NewConnectionValue)
    debug-output "Old Connection value = "$(OldConnectionValue)
    debug-output "New FlowControlCap value = "$(NewFlowControlCapValue)
    debug-output "Old FlowControlCap value = "$(OldFlowControlCapValue)

    ifstr(i) $(NewConnectionValue) == $(OldConnectionValue)
        ifstr(i) $(NewFlowControlCapValue) == $(OldFlowControlCapValue)
                set RetStatus = STATUS_USERCANCEL
        endif
    endif

    ifstr(i) $(RetStatus) == "STATUS_SUCCESSFUL"
        set NewValueList = {                                        +
            { SpeedAndDuplex, $(NoTitle), $(!REG_VT_DWORD),     +
                $(NewConnectionValue)},                             +
            { FlowControlCap, $(NoTitle), $(!REG_VT_DWORD),         +
                $(NewFlowControlCapValue)} }
        shell $(UtilityInf), AddValueList, $(ParameterKey), $(NewValueList)
    endif

    closeregkey $(ParameterKey)

    return $(RetStatus)



;*******************************************************************************
; Description:
;    
; Input:
;    $($0): PciIdList
;
; Output:
;    $($R0) Adapter list.
;*******************************************************************************
[BuildAdapterList]
    read-syms DebugControl
    read-syms FileConstants

    debug-output "### BuildAdapterList"

    set PciIdList = $($0)
    debug-output "PciIdList: "$(PciIdList)

    ; Load dtect44x.dll so we can get the PCI sub vendor id.
    LoadLibrary $(MsgCannotFinddtect44xxDll) $(!STF_WINDOWSSYSPATH)"\"+
        $(dtect44xxDll) HwdtectDll

    set AllAdapterList = {}

    forlistdo $(PciIdList)
        set VID = *($($), 1)
        set DID = *($($), 2)
        debug-output "VID: "$(VID)"  DID: "$(DID)

        shell $(UtilityInf), GetPCIInformation, $(VID) $(DID)
        ifint $($ShellCode) == $(!SHELL_CODE_OK)
            set AdapterList = $($R0)
            debug-output "AdapterList: "$(AdapterList)

            forlistdo $(AdapterList)
                set Adapter = $($)
                set BusNum = *($(Adapter), 1)
                set DeviceNum = *($(Adapter), 2)
                set FunctionNum = *($(Adapter), 3)

                ; Get subvendor ID.
                LibraryProcedure SVID $(HwdtectDll) dtectPortIo44xx "PciRd16" +
                    $(BusNum) $(DeviceNum) $(FunctionNum) "0x2c"
                debug-output "SVID: "$(SVID)

                ; Get the subsystem id.
                LibraryProcedure SSID $(HwdtectDll) dtectPortIo44xx "PciRd16" +
                    $(BusNum) $(DeviceNum) $(FunctionNum) "0x2e"
                debug-output "SSID: "$(SSID)

                set AllAdapterList = >($(AllAdapterList), $(Adapter))
            endforlistdo
        endif
    endforlistdo

    FreeLibrary $(HwdtectDll)

    debug-output "AllAdapterList: "$(AllAdapterList)

    return $(AllAdapterList)



;*******************************************************************************
; Description:
;    
; Input:
;    $($0):  OptionId
;    $($1):  SourceDirectory
;    $($2):  AddCopy  (YES | NO)
;    $($3):  DoCopy   (YES | NO)
;    $($4):  DoConfig (YES | NO)
;
; Output:
;    $($R0)  STATUS_FAILED or STATUS_SUCCESSFUL
;*******************************************************************************
[InstallSection]
    read-syms DebugControl
    debug-output "### InstallSection # # # # # # # "

    set OptionId = $($0)
    set SrcDir   = $($1)
    set AddCopy  = $($2)
    set DoCopy   = $($3)
    set DoConfig = $($4)

    read-syms FileConstants
    read-syms FileConstants$(!STF_LANGUAGE)

    detect CurrentDate

    ; Get installation source directory.
    ifstr(i) $(DoCopy) == "YES"
        debug-output "DoCopy"

        shell $(UtilityInf) DoAskSource $(!STF_CWDDIR) $(SrcDir) YES
        ifint $($ShellCode) != $(!SHELL_CODE_OK)
            shell "" ShowShellErrorMessage
            return STATUS_FAILED
        else-ifstr(i) $($R0) == STATUS_FAILED
            shell "" ShowRegistryErrorMessage "FATAL" ASK_SOURCE_FAIL
            return STATUS_FAILED
        else-ifstr(i) $($R0) == STATUS_USERCANCEL
            debug-output "User cancelled."
            return STATUS_USERCANCEL
        endif

        set SrcDir = $($R1)
    endif

    ; Default line setting.
    set ConnectionList = ^(RequestedMediaType$(OptionId), 1)
    set ConnectionValueList = ^(RequestedMediaType$(OptionId), 2)
    debug-output "ConnectionList = "$(ConnectionList)
    debug-output "ConnectionValueList = "$(ConnectionValueList)

    set FlowControlCapList = ^(FlowControlCap$(OptionId), 1)
    set FlowControlCapValueList = ^(FlowControlCap$(OptionId), 2)
    debug-output "FlowControlCapList: "$(FlowControlCapList)
    debug-output "FlowControlCapValueList: "$(FlowControlCapValueList)

    set ConnectionIndex = 0
    set ConnectionValue = *($(ConnectionList), +
            ~($(ConnectionValueList), $(ConnectionIndex)))
    set ConnectionIndex = $(ConnectionValue)

    set FlowControlCapIndex = 0
    set FlowControlCapValue = *($(FlowControlCapList), +
            ~($(FlowControlCapValueList), $(FlowControlCapIndex)))
    set FlowControlCapIndex = $(FlowControlCapValue)

    ; First time installation -- we need to install the software component.
    openregkey $(!REG_H_LOCAL) "" $(MiniportProductKeyName) $(MAXIMUM_ALLOWED) +
        ProductKey
    ifstr $(ProductKey) == ""
        debug-output "First time installation............."

        install "Install-Help"
        install "Install-OTHER"

        ifstr(i) $(STF_INSTALL_OUTCOME) != STF_SUCCESS
            debug-output "Copy file failed."
            shell "" ShowRegistryErrorMessage "FATAL" UNABLE_COPY_FILE
            return STATUS_FAILED
        endif

        install "Install-Option"

        debug-output "Create the software component."

        shell $(UtilityInf), AddSoftwareComponent, $(Manufacturer), +
            $(MiniportProductName), $(MiniportProductName), +
            $(MiniportProductSoftwareDisplayName), $(STF_CONTEXTINFNAME), +
            $(ProductSoftwareImagePath), "kernel", "NDIS", {}, "", +
            $(NetEventDll)
        ifstr(i) $($R0) != NO_ERROR
            debug-output "Add miniport software component failed."

            closeregkey $($R1)
            closeregkey $($R2)
            closeregkey $($R3)
            closeregkey $($R4)
            closeregkey $($R5)

            shell "" ShowRegistryErrorMessage "FATAL" $($R0)
            return STATUS_FAILED
        endif

        ; $R1 contains handle to "SOFTWARE\Broadcom\CurrentVersion".
        ; $R2 contains handle to "SOFTWARE\Broadom\CurrentVersion\NetRules".
        ; $R3 contains handle to "SYSTEM\CurrentControlSet\Blfp".
        ; $R4 contains handle to "SYSTEM\CurrentControlSet\Blfp\Parameters".
        ; $R5 contains handle to "SYSTEM\CurrentControlSet\Blfp\Linkage".

        set ProductKey   = $($R1)
        set NetRuleKey   = $($R2)
        set ServiceKey   = $($R3)
        set ParameterKey = $($R4)
        set LinkageKey   = $($R5)

        set NewValueList = {                                +
            { SoftwareType, $(NoTitle), $(!REG_VT_SZ),      +
                $(MiniportSoftwareType) },                  +
            { MajorVersion, $(NoTitle), $(!REG_VT_DWORD),   +
                $(ProductMajorVersion) },                   +
            { MinorVersion, $(NoTitle), $(!REG_VT_DWORD),   +
                $(ProductMinorVersion) },                   +
            { Title,        $(NoTitle), $(!REG_VT_SZ),      +
                $(MiniportProductSoftwareTitle) },          +
            { Description,  $(NoTitle), $(!REG_VT_SZ),      +
                $(MiniportProductDescription) },            +
            { ServiceName,  $(NoTitle), $(!REG_VT_SZ),      +
                $(MiniportProductName) },                   +
            { InstallDate,  $(NoTitle), $(!REG_VT_DWORD),   +
                *($(Now),1) } }

        shell $(UtilityInf), AddValueList, $(ProductKey), $(NewValueList)
        ifstr(i) $($R0) != NO_ERROR
            debug-output "Cannot create miniport software key."

            closeregkey $(ProductKey)
            closeregkey $(NetRuleKey)
            closeregkey $(ServiceKey)
            closeregkey $(ParameterKey)
            closeregkey $(LinkageKey)

            shell "" ShowRegistryErrorMessage "FATAL" $($R0)
            return STATUS_FAILED
        endif

        set NewValueList = {                                                +
            { type,         $(NoTitle), $(!REG_VT_SZ),                      +
                $(MiniportNetRuleSoftwareType) },                           +
            { use,          $(NoTitle), $(!REG_VT_SZ),                      +
                $(MiniportNetRuleSoftwareUse) },                            +
            { bindform,     $(NoTitle), $(!REG_VT_SZ),                      +
                $(MiniportNetRuleSoftwareBindForm) },                       +
            { class,        $(NoTitle), $(!REG_VT_MULTI_SZ),                +
                $(MiniportNetRuleSoftwareClass) },                          +
            { bindable,     $(NoTitle), $(!REG_VT_MULTI_SZ),                +
                $(MiniportNetRuleSoftwareBindable) },                       +
            { InfOption,    $(NoTitle), $(!REG_VT_SZ), $(OptionId) } }

        shell $(UtilityInf), AddValueList, $(NetRuleKey), $(NewValueList)
        ifstr(i) $($R0) != NO_ERROR
            debug-output "### Cannot create the miniport netrules."

            closeregkey $(ProductKey)
            closeregkey $(NetRuleKey)
            closeregkey $(ServiceKey)
            closeregkey $(ParameterKey)
            closeregkey $(LinkageKey)

            shell "" ShowRegistryErrorMessage "FATAL" $($R0)
            return STATUS_FAILED
        endif

        closeregkey $(NetRuleKey)
        closeregkey $(ServiceKey)
        closeregkey $(ParameterKey)
        closeregkey $(LinkageKey)
    endif
    closeregkey $(ProductKey)

    ; Get the adapter list.			 PcidList format:  { VID , DID } , ........ 
    set PciIdList = { { 5348, 17409 } , { 5348, 5900 } }
    shell "" BuildAdapterList $(PciIdList)
    set AdapterList = $($R0)

    ifstr(i) $(AdapterList) == {}
        shell "" ShowErrorMessage "NONFATAL" $(MsgNoAdapterFound)
        return STATUS_FAILED
    endif

    ; Load dtect44x.dll so we can get the PCI sub vendor id.
    LoadLibrary $(MsgCannotFinddtect44xxDll) $(!STF_WINDOWSSYSPATH)"\"+
        $(dtect44xxDll) HwdtectDll

    debug-output "======== Install adapters: "$(AdapterList)
    forlistdo $(AdapterList)
        debug-output "***** Installing adapter "$($)"."
        set BusNum = *($($), 1)
        set DeviceNum = *($($), 2)
        set FunctionNum = *($($), 3)

        ; Change the default parameters according to the subsystem id.
        install "Install-ChangeDefaults"

        shell $(UtilityInf), IsNetCardAlreadyInstalled, $(BusNum), +
            $(DeviceNum), $(Miniport$(OptionId)Description), +
            $(MiniportProductName), "YES"
        ifstr $($R0) != NO_ERROR
            debug-output "IsNetCardAlreadyInstalled returned error."
            shell "" ShowRegistryErrorMessage "FATAL" $($R0)
            return STATUS_FAILED
        endif

        ifstr(i) $($R1) != "YES"
            debug-output "Add hardware component here.........."

            shell $(UtilityInf), AddHardwareComponent, $(MiniportProductName), +
                $(STF_CONTEXTINFNAME), $(MiniportProductKeyName)
            ifstr(i) $($R0) != NO_ERROR
                debug-output "### Add hardware component error."

                closeregkey $($R1)
                closeregkey $($R2)
                closeregkey $($R3)

                shell "" ShowRegistryErrorMessage "FATAL" $($R0)
                return STATUS_FAILED
            endif

            set HardNetCardKey   = $($R1)
            set HardNetRuleKey   = $($R2)
            set HardParameterKey = $($R3)

            set AdapterNumber    = $($R4)

            set NewValueList = { +
                { Manufacturer, $(NoTitle), $(!REG_VT_SZ), $(Manufacturer) }, +
                { Title, $(NoTitle), $(!REG_VT_SZ), +
                    "["$($R4)"] "$(Miniport$(OptionId)HardwareTitle)" "+
                    "(Bus "$(BusNum)", Slot "$(DeviceNum)")." }, +
                { Description, $(NoTitle), $(!REG_VT_SZ), +
                    $(Miniport$(OptionId)Description) }, +
                { ProductName, $(NoTitle), $(!REG_VT_SZ), +
                    $(MiniportProductName) }, +
                { ServiceName, $(NoTitle), $(!REG_VT_SZ), $($R5) }, +
                { InstallDate, $(NoTitle), $(!REG_VT_DWORD), *($(Now), 1) } }

            shell $(UtilityInf), AddValueList, $(HardNetCardKey), +
                $(NewValueList)
            ifstr(i) $($R0) != NO_ERROR
                closeregkey $(HardNetCardKey)
                closeregkey $(HardNetRuleKey)
                closeregkey $(HardParameterKey)

                shell "" ShowRegistryErrorMessage "FATAL" $($R0)

                return STATUS_FAILED
            endif

            set ConnectionValue = *($(ConnectionValueList), +
                    ~($(ConnectionList), $(ConnectionIndex)))
;            set FlowControlCapValue = *($(FlowControlCapValueList), +
;                    ~($(FlowControlCapList), $(FlowControlCapIndex)))
            ; set default FlowControlValue  to  TX Flow control enabled
            set FlowControlCapValue = 2
            debug-output "Connection value = "$(ConnectionValue)
            debug-output "FlowControlCap value = "$(FlowControlCapValue)

            set DeviceId = ""
            LibraryProcedure DeviceId $(HwdtectDll) dtectPortIo44xx "PciRd16" +
                $(BusNum) $(DeviceNum) $(FunctionNum) "0x02"
            debug-output "Device Id: "$(DeviceId)

            ifstr(i) $(DeviceId) == "0x4401"
            debug-output "Device Id is 0x4401........................."
                set NewValueList = { +
                    { BusType,              $(NoTitle), $(!REG_VT_DWORD), 5   }, +
                    { BusNumber,            $(NoTitle), $(!REG_VT_DWORD), $(BusNum) }, +
                    { SlotNumber,           $(NoTitle), $(!REG_VT_DWORD), $(DeviceNum) }, +
                    { FunctionNumber,       $(NoTitle), $(!REG_VT_DWORD), $(FunctionNum) }, +
                    { MediaType,            $(NoTitle), $(!REG_VT_DWORD), 1   }, +
                    { FlowControlCap,       $(NoTitle), $(!REG_VT_DWORD), $(FlowControlCapValue) }, +
                    { SpeedAndDuplex,   $(NoTitle), $(!REG_VT_DWORD), $(ConnectionValue) } }
            endif

             ifstr(i) $(DeviceId) == "0x170C"
            debug-output "Device Id is 0x170C........................."
                set NewValueList = { +
                    { BusType,              $(NoTitle), $(!REG_VT_DWORD), 5   }, +
                    { BusNumber,            $(NoTitle), $(!REG_VT_DWORD), $(BusNum) }, +
                    { SlotNumber,           $(NoTitle), $(!REG_VT_DWORD), $(DeviceNum) }, +
                    { FunctionNumber,       $(NoTitle), $(!REG_VT_DWORD), $(FunctionNum) }, +
                    { MediaType,            $(NoTitle), $(!REG_VT_DWORD), 1   }, +
                    { FlowControlCap,       $(NoTitle), $(!REG_VT_DWORD), $(FlowControlCapValue) }, +
                    { SpeedAndDuplex,   $(NoTitle), $(!REG_VT_DWORD), $(ConnectionValue) } }
            endif


            debug-output "Write driver params."
            shell $(UtilityInf), AddValueList, $(HardParameterKey), +
                $(NewValueList)
            ifstr(i) $($R0) != NO_ERROR
                debug-output "### Add parameter shell error."

                closeregkey $(HardNetCardKey)
                closeregkey $(HardNetRuleKey)
                closeregkey $(HardParameterKey)

                shell "" ShowRegistryErrorMessage "FATAL" $($R0)

                return STATUS_FAILED
            endif

            set TempProdName = """"$(MiniportProductName)$(AdapterNumber)""""
            set TempBindForm = $(TempProdName)$(MiniportNetRuleHardwareBindForm)

            debug-output "updating netrules."
            set NewValueList = {                                           +
                { type,      $(NoTitle), $(!REG_VT_SZ),                    +
                    $(MiniportNetRuleHardwareType) },                      +
                { bindform,  $(NoTitle), $(!REG_VT_SZ), $(TempBindForm) }, +
                { class,     $(NoTitle), $(!REG_VT_MULTI_SZ),              +
                    $(MiniportNetRuleHardwareClass) },                     +
                { InfOption, $(NoTitle), $(!REG_VT_SZ), $(OptionId)} }

            shell $(UtilityInf), AddValueList, $(HardNetRuleKey), +
                $(NewValueList)
            ifstr(i) $($R0) != NO_ERROR
                debug-output "### Add hardware component error."

                closeregkey $(HardNetCardKey)
                closeregkey $(HardNetRuleKey)
                closeregkey $(HardParameterKey)

                shell "" ShowRegistryErrorMessage "FATAL" $($R0)

                return STATUS_FAILED
            endif

            closeregkey $(HardNetCardKey)
            closeregkey $(HardNetRuleKey)

            ifstr(i) $(!STF_GUI_UNATTENDED) == "YES"
                Shell $(UtilityInf), AddDefaultNetCardParameters, +
                    $(HardParameterKey)
            endif

            closeregkey $(HardParameterKey)
        else
            debug-output "Adapter Already Installed ? : R1 = "$($R1)
        endif

        debug-output ""
    endforlistdo

    FreeLibrary $(HwdtectDll)

    return STATUS_SUCCESSFUL

Download Driver Pack

How To Update Drivers Manually

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.

server: web4, load: 0.70