NT4/private/ntos/fw/mips/jzmake.c

497 lines
8.6 KiB
C
Raw Normal View History

2001-01-01 00:00:00 +01:00
/*++
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;
}