89 lines
1.8 KiB
C
89 lines
1.8 KiB
C
/*++
|
|
|
|
Copyright (c) 1989 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
i386init.c
|
|
|
|
Abstract:
|
|
|
|
This module contains code to manipulate i386 hardware structures used
|
|
only by the kernel.
|
|
|
|
Author:
|
|
|
|
Bryan Willman 22 Feb 90
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "ki.h"
|
|
|
|
VOID
|
|
KiInitializeMachineType (
|
|
VOID
|
|
);
|
|
|
|
#pragma alloc_text(INIT,KiInitializeMachineType)
|
|
|
|
KIRQL KiProfileIrql = PROFILE_LEVEL;
|
|
ULONG KeI386MachineType = 0;
|
|
BOOLEAN KeI386NpxPresent;
|
|
BOOLEAN KeI386FxsrPresent;
|
|
ULONG KeI386ForceNpxEmulation;
|
|
ULONG KiMXCsrMask;
|
|
ULONG KeI386CpuType;
|
|
ULONG KeI386CpuStep;
|
|
PVOID Ki387RoundModeTable; // R3 emulators RoundingMode vector table
|
|
ULONG KiBootFeatureBits;
|
|
|
|
ULONG KiInBiosCall = FALSE;
|
|
ULONG FlagState = 0; // bios calls shouldn't automatically turn interrupts back on.
|
|
|
|
KTRAP_FRAME KiBiosFrame;
|
|
|
|
#if DBG
|
|
UCHAR MsgDpcTrashedEsp[] = "\n*** DPC routine %lx trashed ESP\n";
|
|
UCHAR MsgDpcTimeout[] = "\n*** DPC routine > 1 sec --- This is not a break in KeUpdateSystemTime\n";
|
|
UCHAR MsgISRTimeout[] = "\n*** ISR at %lx took over .5 second\n";
|
|
|
|
ULONG KiDPCTimeout = 110;
|
|
ULONG KiISRTimeout = 55;
|
|
ULONG KiSpinlockTimeout = 55;
|
|
#endif
|
|
UCHAR MsgISROverflow[] = "\n*** ISR at %lx appears to have an interrupt storm\n";
|
|
USHORT KiISROverflow = 30000;
|
|
|
|
VOID
|
|
KiInitializeMachineType (
|
|
VOID
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function initializes machine type, i.e. MCA, ABIOS, ISA
|
|
or EISA.
|
|
N.B. This is a temporary routine. machine type:
|
|
Byte 0 - Machine Type, ISA, EISA or MCA
|
|
Byte 1 - CPU type, i386 or i486
|
|
Byte 2 - Cpu Step, A or B ... etc.
|
|
Highest bit indicates if NPX is present.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
KeI386MachineType = KeLoaderBlock->u.I386.MachineType & 0x000ff;
|
|
}
|