diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/fw/mips/jzmake.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/fw/mips/jzmake.c')
-rw-r--r-- | private/ntos/fw/mips/jzmake.c | 496 |
1 files changed, 496 insertions, 0 deletions
diff --git a/private/ntos/fw/mips/jzmake.c b/private/ntos/fw/mips/jzmake.c new file mode 100644 index 000000000..806b4959b --- /dev/null +++ b/private/ntos/fw/mips/jzmake.c @@ -0,0 +1,496 @@ +/*++ + +Copyright (c) 1991 Microsoft Corporation + +Module Name: + + jzmake.c + +Abstract: + + This module contains the code to make the configuration and environment + variable data structures in the Jazz NVRAM. + + +Author: + + David M. Robinson (davidro) 25-Oct-1991 + +Revision History: + +--*/ + +#include "jzsetup.h" + +// +// Routine prototypes. +// + +VOID +JzMakeConfiguration ( + ULONG Monitor, + ULONG Floppy, + ULONG Floppy2 + ); + +BOOLEAN +JzMatchComponent( + IN PCHAR Value1, + IN PCHAR Value2 + ); + +ULONG +JzGetYesNo ( + IN PULONG CurrentLine, + IN PCHAR PromptString, + IN BOOLEAN YesIsDefault + ); + +#ifdef DUO +ULONG +JzGetScsiBus ( + IN PULONG CurrentLine, + IN ULONG InitialValue + ); +#endif // DUO + +ULONG +JzGetScsiId ( + IN PULONG CurrentLine, + IN PCHAR Prompt, + IN ULONG InitialValue + ); + +ULONG +JzGetDevice ( + IN PULONG CurrentLine + ); + +ULONG +JzGetPartition ( + IN PULONG CurrentLine, + IN BOOLEAN MustBeFat + ); + + +VOID +JzMakeEnvironment ( + ULONG BusNumber, + ULONG Device, + ULONG DeviceId, + ULONG DevicePartition + ) + +/*++ + +Routine Description: + + This routine initializes the environment variables. + +Arguments: + + None. + +Return Value: + + None. + +--*/ +{ + ARC_STATUS Status; + CHAR TempString[80]; + + switch (Device) { +#ifdef DUO + case 0: + sprintf( TempString, + "scsi(%1d)disk(%1d)rdisk()partition(%1d)", + BusNumber, + DeviceId, + DevicePartition); + break; + case 1: + sprintf( TempString, + "scsi(%1d)disk(%1d)fdisk()", + BusNumber, + DeviceId); + break; + default: + sprintf( TempString, + "scsi(%1d)cdrom(%1d)fdisk()", + BusNumber, + DeviceId); + break; +#else + case 0: + sprintf( TempString, + "scsi()disk(%1d)rdisk()partition(%1d)", + DeviceId, + DevicePartition); + break; + case 1: + sprintf( TempString, + "scsi()disk(%1d)fdisk()", + DeviceId); + break; + default: + sprintf( TempString, + "scsi()cdrom(%1d)fdisk()", + DeviceId); + break; +#endif // DUO + } + + Status = ArcSetEnvironmentVariable("CONSOLEIN", + "multi()key()keyboard()console()"); + + if (Status != ESUCCESS) { + goto TestError; + } + + Status = ArcSetEnvironmentVariable("CONSOLEOUT", + "multi()video()monitor()console()"); + + if (Status != ESUCCESS) { + goto TestError; + } + + Status = ArcSetEnvironmentVariable("FWSEARCHPATH", + TempString); + + if (Status != ESUCCESS) { + goto TestError; + } + + // TEMPTEMP + Status = ArcSetEnvironmentVariable("SYSTEMPARTITION", + TempString); + + if (Status != ESUCCESS) { + goto TestError; + } + // TEMPTEMP + +// Status = ArcSetEnvironmentVariable("TIMEZONE", +// "PST8PDT"); + +// if (Status != ESUCCESS) { +// goto TestError; +// } + +#ifndef DUO + Status = ArcSetEnvironmentVariable("A:", + "multi()disk()fdisk()"); +#endif // DUO + + if (Status != ESUCCESS) { + goto TestError; + } + + return; + +TestError: + + JzPrint(JZ_CANT_SET_VARIABLE_MSG); + return; +} + + +ULONG +JzGetMonitor ( + IN PULONG CurrentLine + ) + +/*++ + +Routine Description: + +Arguments: + + None. + +Return Value: + + None. + +--*/ +{ + ULONG Line; + ULONG ReturnValue; + + Line = *CurrentLine; + *CurrentLine += NUMBER_OF_RESOLUTIONS + 2; + + JzSetPosition( Line, 0); + JzPrint(JZ_MONITOR_RES_MSG); + + ReturnValue = JxDisplayMenu( ResolutionChoices, + NUMBER_OF_RESOLUTIONS, + 0, + Line + 1); + + JzSetPosition( *CurrentLine, 0); + return ReturnValue; +} + + +ULONG +JzGetFloppy ( + IN PULONG CurrentLine + ) + +/*++ + +Routine Description: + +Arguments: + + None. + +Return Value: + + None. + +--*/ +{ + ULONG Line; + ULONG ReturnValue; + + Line = *CurrentLine; + *CurrentLine += NUMBER_OF_FLOPPIES + 2; + + JzSetPosition( Line, 0); + JzPrint(JZ_FLOPPY_SIZE_MSG); + + ReturnValue = JxDisplayMenu( FloppyChoices, + NUMBER_OF_FLOPPIES, + 1, + Line + 1); + + JzSetPosition( *CurrentLine, 0); + return ReturnValue; +} + + +BOOLEAN +JzMakeDefaultConfiguration ( + VOID + ) + +/*++ + +Routine Description: + +Arguments: + + None. + +Return Value: + + Returns TRUE if the configuration was modified, otherwise returns FALSE. + +--*/ +{ + ARC_STATUS Status; + ULONG Index; + UCHAR Character; + ULONG Count; + PUCHAR Nvram; + ULONG CurrentLine; + LONG Monitor; + LONG Floppy; + LONG Floppy2; + ULONG OldScsiHostId; + + JzClearScreen(); + JzShowTime(TRUE); + CurrentLine = 2; + + Monitor = JzGetMonitor(&CurrentLine); + if (Monitor == -1) { + return(FALSE); + } + + Floppy = JzGetFloppy(&CurrentLine); + if (Floppy == -1) { + return(FALSE); + } + + Floppy2 = JzGetYesNo(&CurrentLine, JZ_2ND_FLOPPY_MSG, FALSE); + if (Floppy2 == -1) { + return(FALSE); + } + + if (Floppy2 == 0) { + Floppy2 = JzGetFloppy(&CurrentLine); + if (Floppy == -1) { + return(FALSE); + } + } else { + Floppy2 = -1; + } + + // + // Save the current scsi host id, and then change ScsiHostId to an invalid + // value so that the user can select the current id (see JzGetScsiId). + // + + OldScsiHostId = ScsiHostId; + ScsiHostId = 8; + ScsiHostId = JzGetScsiId(&CurrentLine, JZ_SCSI_HOST_MSG, OldScsiHostId); + if (ScsiHostId == -1) { + ScsiHostId = OldScsiHostId; + return(FALSE); + } + + // + // Clear the configuration information. + // + + JzPrint(JZ_CLEAR_CONFIG_MSG); + + // + // Zero all of the configuration read/write NVRAM, note that the checksum is + // also zero in this case. + // + + for ( Nvram = (PUCHAR)(NVRAM_CONFIGURATION); + Nvram < (PUCHAR)(NVRAM_CONFIGURATION + + sizeof(COMPRESSED_CONFIGURATION_PACKET) * NUMBER_OF_ENTRIES + + LENGTH_OF_IDENTIFIER + + LENGTH_OF_DATA + + 4) ; + Nvram++ ) { + WRITE_REGISTER_UCHAR( Nvram, 0 ); + } + + // + // Clear the EISA space. + // + + Nvram = (PUCHAR)((PNV_CONFIGURATION)NVRAM_CONFIGURATION)->EisaData; + for ( Index = 0; + Index < LENGTH_OF_EISA_DATA + 4; + Index++ ) { + WRITE_REGISTER_UCHAR( &Nvram[Index], 0 ); + } + + // + // Add components. + // + + JzPrint(JZ_ADD_CONFIG_MSG); + JzMakeConfiguration(Monitor, Floppy, Floppy2); + + // + // Save configuration in Nvram. + // + + JzPrint(JZ_SAVE_CONFIG_MSG); + ArcSaveConfiguration(); + + JzPrint(JZ_DONE_CONFIG_MSG); + FwWaitForKeypress(); + + return(TRUE); +} + + +VOID +JzMakeDefaultEnvironment ( + VOID + ) + +/*++ + +Routine Description: + +Arguments: + + None. + +Return Value: + + None. + +--*/ +{ + ARC_STATUS Status; + ULONG Index; + UCHAR Character; + ULONG Count; + PUCHAR Nvram; + ULONG CurrentLine; + LONG BusNumber; + LONG Device; + LONG DeviceId; + LONG DevicePartition; + + + JzClearScreen(); + JzShowTime(TRUE); + CurrentLine = 2; + JzSetPosition( CurrentLine, 0); + + JzPrint(JZ_DEFAULT_SYS_PART_MSG); + CurrentLine += 1; + JzSetPosition( CurrentLine, 0); + +#ifdef DUO + BusNumber = JzGetScsiBus(&CurrentLine, 0); + if (BusNumber == -1) { + return; + } +#endif // DUO + + Device = JzGetDevice(&CurrentLine); + if (Device == -1) { + return; + } + + DeviceId = JzGetScsiId(&CurrentLine, " Enter SCSI ID: ", 0); + if (DeviceId == -1) { + return; + } + + // + // If the media is scsi disk, get the partition. + // + + if (Device == 0) { + DevicePartition = JzGetPartition(&CurrentLine, TRUE); + if (DevicePartition == -1) { + return; + } + + } + + // + // Clear the environment information. + // + + JzPrint(JZ_CLEAR_CONFIG_MSG); + + // + // Zero all of the environment read/write NVRAM, note that the checksum is + // also zero in this case. + // + + Nvram = (PUCHAR)((PNV_CONFIGURATION)NVRAM_CONFIGURATION)->Environment; + for ( Index = 0; + Index < LENGTH_OF_ENVIRONMENT + 4; + Index++ ) { + WRITE_REGISTER_UCHAR( &Nvram[Index], 0 ); + } + + // + // Add environment variables. + // + + JzPrint(JZ_ADD_ENVIR_MSG); + JzMakeEnvironment(BusNumber, Device, DeviceId, DevicePartition); + FwWaitForKeypress(); + + return; +} + |