summaryrefslogtreecommitdiffstats
path: root/private/ntos/fw/mips/jzmake.c
diff options
context:
space:
mode:
authorAdam <you@example.com>2020-05-17 05:51:50 +0200
committerAdam <you@example.com>2020-05-17 05:51:50 +0200
commite611b132f9b8abe35b362e5870b74bce94a1e58e (patch)
treea5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/fw/mips/jzmake.c
downloadNT4.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.c496
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;
+}
+