windows-nt/Source/XPSP1/NT/base/ntos/ke/i386/i386init.c

89 lines
1.8 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*++
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;
}