; oemsetup.inf - version NT.2 for FLINT driver
;
;************************************************************************
;                                                                       *
;   Copyright 1994-1999 LSI Logic Corp. All rights reserved.            *
;                                                                       *
;   This file is property of LSI Logic Corp. and is licensed for        *
;   for use as is.  The receipt of or possession of this file does      *
;   not convey any rights to modify its contents, in whole, or in part, *
;   without the specific written consent of LSI Logic Corp.             *
;                                                                       *
;************************************************************************
;-----------------------------------------------------------------------
; OPTION TYPE
; -----------
; This identifies the Option type we are dealing with.  The different
; possible types are:
;
; COMPUTER, VIDEO, POINTER, KEYBOARD, LAYOUT, SCSI, TAPE, PRINTER, ...
;-----------------------------------------------------------------------

[Identification]
	OptionType = SCSI

;-----------------------------------------------------------------------
; LANGUAGES SUPPORTED
; -------------------
;
; The languages supported by the INF, For every language supported
; we need to have a separate text section for every displayable text
; section.
;
;-----------------------------------------------------------------------

[LanguagesSupported]
	ENG


;-----------------------------------------------------------------------
; OPTION LIST
; -----------
; This section lists the Option key names.  These keys are locale
; independent and used to represent the option in a locale independent
; manner.
;
;-----------------------------------------------------------------------

[Options]
	"SYMC8XX"    = Symc8XX

;-----------------------------------------------------------------------
; OPTION TEXT SECTION
; -------------------
; These are text strings used to identify the option to the user.  There
; are separate sections for each language supported.  The format of the
; section name is "OptionsText" concatenated with the Language represented
; by the section.
;
;-----------------------------------------------------------------------

[OptionsTextENG]
	"SYMC8XX"    = "Symbios Logic PCI (53c8XX)"


;-----------------------------------------------------------------------------------------
; SCSI MINIPORT DRIVERS:
;
; Order of the information:
;
; Class driver = Type, Group, ErrorControl, Tag, EventMessageFile, TypesSupported
;
;-----------------------------------------------------------------------------------------

[MiniportDrivers]
	Symc8XX  = !SERVICE_KERNEL_DRIVER, "SCSI Miniport", !SERVICE_ERROR_NORMAL,  17, %SystemRoot%\System32\IoLogMsg.dll , 7

;---------------------------------------------------------------------------
; 1. Identify
;
; DESCRIPTION:   To verify that this INF deals with the same type of options
;                as we are choosing currently.
;
; INPUT:         None
;
; OUTPUT:        $($R0): STATUS: STATUS_SUCCESSFUL
;                $($R1): Option Type (COMPUTER ...)
;                $($R2): Diskette description
;---------------------------------------------------------------------------

[Identify]
	;
	;
	read-syms Identification

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

	Return $(Status) $(Identifier) $(Media)



;------------------------------------------------------------------------
; 2. ReturnOptions:
;
; DESCRIPTION:   To return the option list supported by this INF and the
;                localised text list representing the options.
;
;
; INPUT:         $($0):  Language used. ( ENG | FRN | ... )
;
; OUTPUT:        $($R0): STATUS: STATUS_SUCCESSFUL |
;                                STATUS_NOLANGUAGE
;                                STATUS_FAILED
;
;                $($R1): Option List
;                $($R2): Option Text List
;------------------------------------------------------------------------

[ReturnOptions]
	;
	;
	set Status        = STATUS_FAILED
	set OptionList     = {}
	set OptionTextList = {}

	;
	; Check if the language requested is supported
	;
	set LanguageList = ^(LanguagesSupported, 1)
	Ifcontains(i) $($0) in $(LanguageList)
		goto returnoptions
	else
		set Status = STATUS_NOLANGUAGE
		goto finish_ReturnOptions
	endif

	;
	; form a list of all the options and another of the text representing
	;

returnoptions = +
	set OptionList     = ^(Options, 0)
	set OptionTextList = ^(OptionsText$($0), 1)
	set Status         = STATUS_SUCCESSFUL

finish_ReturnOptions = +
	Return $(Status) $(OptionList) $(OptionTextList)


;
; 3. InstallOption:
;
; FUNCTION:  To copy files representing Options
;            To configure the installed option
;            To 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]

	;
	; Set default values for
	;
	set Status = STATUS_FAILED
	set DrivesToFree = {}

	;
	; extract parameters
	;
	set Option   = $($1)
	set SrcDir   = A:\WINNT\MINIPORT
	set AddCopy  = $($3)
	set DoCopy   = $($4)
	set DoConfig = $($5)

	;
	; Check if the language requested is supported
	;
	set LanguageList = ^(LanguagesSupported, 1)
	Ifcontains(i) $($0) in $(LanguageList)
	else
		set Status = STATUS_NOLANGUAGE
		goto finish_InstallOption
	endif
	read-syms Strings$($0)

	;
	; check to see if Option is supported.
	;

	set OptionList = ^(Options, 0)
	ifcontains $(Option) in $(OptionList)
	else
		Debug-Output "SCSI.INF: SCSI option is not supported."
		goto finish_InstallOption
	endif
	set OptionList = ""

	;
	; Option has been defined already
	;

	set MiniportDriver   =   #(Options,         $(Option),         1)
	set Type             = $(#(MiniportDrivers, $(MiniportDriver), 1))
	set Group            =   #(MiniportDrivers, $(MiniportDriver), 2)
	set ErrorControl     = $(#(MiniportDrivers, $(MiniportDriver), 3))
	set Tag              =   #(MiniportDrivers, $(MiniportDriver), 4)
	set EventMessageFile =   #(MiniportDrivers, $(MiniportDriver), 5)
	set TypesSupported   =   #(MiniportDrivers, $(MiniportDriver), 6)

	set Start            =   $(!SERVICE_BOOT_START)

installtheoption = +

	;
	; Code to add files to copy list
	;

	ifstr(i) $(AddCopy) == "YES"
		set DoActualCopy = NO
		set FileToCheck = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)
		LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(!STF_WINDOWSSYSPATH)"\drivers\"$(FileToCheck)
		ifstr(i) $(STATUS) == NO
			set DoActualCopy = YES
		endif

		ifstr(i) $(DoActualCopy) == NO
			shell "subroutn.inf" DriversExist $($0) $(String1)
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "SCSI.INF: shelling DriversExist failed"
				goto finish_InstallOption
			endif

			ifstr(i) $($R0) == STATUS_CURRENT
			else-ifstr(i) $($R0) == STATUS_NEW
				set DoActualCopy = YES
			else-ifstr(i) $($R0) == STATUS_USERCANCEL
				Debug-Output "SCSI.INF: User cancelled SCSI installation"
				goto finish_InstallOption
			else
				Debug-Output "SCSI.INF: Error reported in DriversExist routine in SUBROUTN.INF"
				goto finish_InstallOption
			endif
		endif

		ifstr(i) $(DoActualCopy) == YES

			shell "subroutn.inf" DoAskSourceEx $(SrcDir) $(String2)
			ifint $($ShellCode) != $(!SHELL_CODE_OK)
				Debug-Output "SCSI.INF: shelling DoAskSourceEx failed"
				goto finish_InstallOption
			endif

			ifstr(i) $($R0) == STATUS_SUCCESSFUL
				set SrcDir = $($R1)
				ifstr(i) $($R2) != ""
					set DrivesToFree = >($(DrivesToFree), $($R2))
				endif
			else
				Debug-Output "SCSI.INF: User cancelled asking source."
				goto finish_InstallOption
			endif

			install Install-AddCopyOption
			ifstr(i) $(STF_INSTALL_OUTCOME) != "STF_SUCCESS"
				Debug-Output "Adding SCSI files to copy list failed"
				goto finish_InstallOption
			endif
		else
			set DoCopy = NO
		endif

	endif

	ifstr(i) $(DoCopy) == "YES"
		read-syms ProgressCopy$($0)
		install Install-DoCopyOption
		ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_FAILURE"
			Debug-Output "Copying files failed"
			goto finish_InstallOption
		else-ifstr(i) $(STF_INSTALL_OUTCOME) == "STF_USERQUIT"
			set Status = STATUS_USERCANCEL
			goto finish_InstallOption
		endif
	endif

	ifstr(i) $(DoConfig) == "YES"
		;
		; first run a privilege check on modifying the setup node
		;

		shell "registry.inf" CheckSetupModify
		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			goto finish_InstallOption
		endif

		ifstr(i) $($R0) != STATUS_SUCCESSFUL
			goto finish_InstallOption
		endif

		;
		; then make a new SCSI entry, the entry is created automatically
		; enabled
		;

		set ServiceNode   = $(MiniportDriver)
		set ServiceBinary = System32\drivers\#(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)

		set ServicesValues   = { +
				{Type,           0, $(!REG_VT_DWORD),     $(Type)                  }, +
				{Start,          0, $(!REG_VT_DWORD),     $(Start)                 }, +
				{Group,          0, $(!REG_VT_SZ),        $(Group)                 }, +
				{ErrorControl,   0, $(!REG_VT_DWORD),     $(ErrorControl)          }, +
				{Tag,            0, $(!REG_VT_DWORD),     $(Tag)                   }, +
				{BinaryPathName, 0, $(!REG_VT_EXPAND_SZ), $(ServiceBinary)         }  +
				}

		;***********************************************************
		;    Can add other things to ScsiParm value if needed...
		;***********************************************************

		set ScsiParm = ""

		set ParametersValues = { +
			{ DriverParameter, 0, $(!REG_VT_SZ), $(ScsiParm) } +
			}

		set DeviceValues     = {}

		set EventLogValues   = { +
				{EventMessageFile, 0, $(!REG_VT_EXPAND_SZ), $(EventMessageFile) }, +
				{TypesSupported,   0, $(!REG_VT_DWORD),     $(TypesSupported)   }  +
				}

		shell "registry.inf"  MakeServicesEntry $(ServiceNode)      +
												$(ServicesValues)   +
												$(ParametersValues) +
												$(DeviceValues)     +
												$(EventLogValues)   +
												Device


		ifint $($ShellCode) != $(!SHELL_CODE_OK)
			Debug-Output "Couldn't execute MakeServicesEntry in registry.inf"
			goto finish_InstallOption
		endif

		ifstr(i) $($R0) != STATUS_SUCCESSFUL
			Debug-Output "MakeServicesEntry failed for SCSI"
			goto finish_InstallOption
		endif

	endif

	set Status = STATUS_SUCCESSFUL
finish_InstallOption = +

    ;
    ; Add registry entries
    ;

    set KeyName = "System\CurrentControlSet\Services\Symc8xx"
    OpenRegKey $(!REG_H_LOCAL) "" $(KeyName) $(!REG_KEY_ALL_ACCESS) KeyHandle
    ifstr(i) $(KeyHandle) != ""
        OpenRegKey $(!REG_H_LOCAL) "" $(KeyName)"Parameters\Device" $(!REG_KEY_ALL_ACCESS) TestKeyHandle
        ifstr(i) $(TestKeyHandle) == ""
            CreateRegKey $(KeyHandle) {"Parameters",0,GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" ParamKeyHandle
            CreateRegKey $(ParamKeyHandle) {"Device",0,GenericClass} "" $(!REG_KEY_ALL_ACCESS) "" DevKeyHandle
            SetRegValue $(DevKeyHandle) {MaximumSGList,0,$(!REG_VT_DWORD),"65"}
            SetRegValue $(DevKeyHandle) {NumberOfRequests,0,$(!REG_VT_DWORD),"128"}
            CloseRegKey $(DevKeyHandle)
            CloseRegKey $(ParamKeyHandle)
        endif
        CloseRegKey $(TestKeyHandle)
    endif
    CloseRegKey $(KeyHandle)

	ForListDo $(DrivesToFree)
		LibraryProcedure STATUS,$(!LIBHANDLE), DeleteNetConnection $($) "TRUE"
	EndForListDo

	Return $(Status)


[Install-AddCopyOption]

	;
	; Add the files to the copy list
	;
	AddSectionKeyFileToCopyList   Files-ScsiMiniportDrivers         +
								  $(MiniportDriver)                 +
								  $(SrcDir)                      +
								  $(!STF_WINDOWSSYSPATH)\drivers

	exit


[Install-DoCopyOption]

	;
	; Copy files in the copy list
	;
	CopyFilesInCopyList
	exit

;-------------------------------------------------------------------------
; 4. DeInstallOption:
;
; FUNCTION:  To remove files representing Option
;            To remove the registry entry corresponding to the Option
;
; INPUT:     $($0):  Language to use
;            $($1):  OptionID to install
;
; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
;                            STATUS_NOLANGUAGE |
;                            STATUS_USERCANCEL |
;                            STATUS_FAILED
;-------------------------------------------------------------------------
[DeInstallOption]
	;
	; Set default values for
	;
	set Status   = STATUS_FAILED
	;
	; extract parameters
	;
	set Option   = $($1)

	;
	; Check if the language requested is supported
	;
	set LanguageList = ^(LanguagesSupported, 1)
	Ifcontains(i) $($0) in $(LanguageList)
	else
		set Status = STATUS_NOLANGUAGE
		goto finish_DeInstallOption
	endif
	read-syms Strings$($0)

	;
	; check to see if Option is supported.
	;

	set OptionList = ^(Options, 0)
	ifcontains $(Option) in $(OptionList)
	else
		goto finish_DeInstallOption
	endif
	set OptionList = ""

	;
	; fetch details about option
	;

	set MiniportDriver = #(Options, $(Option), 1)
	set MiniportFile   = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)
	set FilePath       = $(!STF_WINDOWSSYSPATH)"\drivers\"$(MiniportFile)

	;
	; check to see if file is installed
	; if not give success
	;

	LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FilePath)
	ifstr(i) $(STATUS) == "NO"
		set Status = STATUS_SUCCESSFUL
		goto finish_DeInstallOption
	endif

	shell "registry.inf" GetServicesEntryStart $(MiniportDriver)
	ifstr(i) $($R0) != "STATUS_SUCCESSFUL"
		; this could happen if there is no start value or there is no
		; key, in which case the option is not installed
		set Status = STATUS_SUCCESSFUL
		goto finish_DeInstallOption
	endif

	ifstr(i) $($R1) == $(!SERVICE_BOOT_START)
		shell "subroutn.inf" SetupMessage $(!STF_LANGUAGE) "WARNING" $(String3)
		ifstr(i) $($R0) != STATUS_SUCCESSFUL
			goto do_removal
		endif
		ifstr(i) $($R1) == "CANCEL"
			goto finish_DeInstallOption
		endif
	endif

do_removal =+
	;
	; disable the registry entry
	;

	shell "registry.inf" RemoveServicesEntry $(MiniportDriver)
	ifint $($ShellCode) != $(!SHELL_CODE_OK)
		Debug-Output "SCSI.INF: Failed to shell RemoveServicesEntry"
		goto finish_DeInstallOption
	endif

	ifstr(i) $($R0) != STATUS_SUCCESSFUL
		Debug-Output "SCSI.INF: Failed to disable services entry"
		goto finish_DeInstallOption
	endif

	;
	; we won't remove the file because we can only do so during the next boot.
	; if the user chooses to reinstall the same driver during this boot
	; he will still end up deleting the driver on next boot. if the file
	; should be deleted a warning should be put up saying that the user should
	; not try to reinstall the driver during this boot
	;
	;    AddFileToDeleteList $(FilePath)

	set Status = STATUS_SUCCESSFUL

finish_DeInstallOption =+
	return $(Status)


;-------------------------------------------------------------------------
; 5. GetInstalledOptions:
;
; FUNCTION:  To find out the list of options which are installed
;
; INPUT:     $($0): Language to Use
;
; OUTPUT:    $($R0): STATUS: STATUS_SUCCESSFUL |
;                            STATUS_FAILED
;
;            $($R1): List of options installed
;            $($R2): Option installed Text List
;-------------------------------------------------------------------------
[GetInstalledOptions]
	set Status = STATUS_FAILED
	set InstalledOptions = {}
	set InstalledOptionsText = {}

	;
	; Check if the language requested is supported
	;
	set LanguageList = ^(LanguagesSupported, 1)
	Ifcontains(i) $($0) in $(LanguageList)
	else
		set Status = STATUS_NOLANGUAGE
		goto finish_GetInstalledOptions
	endif

	set OptionList = ^(Options, 0)
	ForListDo $(OptionList)
		set MiniportDriver = #(Options, $($), 1)
		set MiniportFile   = #(Files-ScsiMiniportDrivers, $(MiniportDriver), 2)
		set FilePath       = $(!STF_WINDOWSSYSPATH)"\drivers\"$(MiniportFile)
		LibraryProcedure STATUS,$(!LIBHANDLE),CheckFileExistance $(FilePath)
		ifstr(i) $(STATUS) == "YES"
			shell "registry.inf" GetServicesEntryStart $(MiniportDriver)
			ifint $($ShellCode) == $(!SHELL_CODE_OK)
				ifstr(i) $($R0) == STATUS_SUCCESSFUL
					ifstr(i) $($R1) != $(!SERVICE_DISABLED)

						set OptionText = #(OptionsText$($0), $($), 1)
						set InstalledOptions     = >($(InstalledOptions), $($))
						set InstalledOptionsText = >($(InstalledOptionsText), $(OptionText))

					endif
				endif
			endif
		endif
	EndForListDo
	set Status = STATUS_SUCCESSFUL
finish_GetInstalledOptions =+
	Return $(Status) $(InstalledOptions) $(InstalledOptionsText)


;**************************************************************************
; PROGRESS GUAGE VARIABLES
;**************************************************************************

[ProgressCopyENG]
	ProCaption   = "Windows NT Setup"
	ProCancel    = "Cancel"
	ProCancelMsg = "Windows NT is not correcly installed.  Are you sure you want "+
				   "to cancel copying files?"
	ProCancelCap = "Setup Message"
	ProText1     = "Copying:"
	ProText2     = "To:"

[StringsENG]
	String1 = "SCSI Adapter"
	String2 = "Please enter the full path to the OEM SCSI "+
			  "Adapter files.  Then choose Continue."
	String3 = "The SCSI Adapter has been marked as a boot device.  Removing "+
			  "it may cause the system not to boot."$(!LF)$(!LF)"Are you sure "+
			  "you want to remove the Adapter."

[Source Media Descriptions]
	1  = "Symbios Logic PCI (53c8XX)"  , TAGFILE = Symc8XX.tag

[Files-ScsiMiniportDrivers]
Symc8XX = 1,Symc8XX.sys , SIZE=999
