mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 14:37:45 +00:00
[FREELDR]
Check for CPU compatibility early and bugcheck if the CPU is too old. Based on patch by winocm. CORE-6427 svn path=/trunk/; revision=65326
This commit is contained in:
parent
1b2bbd97fa
commit
dc9b7a0dbe
|
@ -60,6 +60,12 @@ ULONG LenBits[] =
|
|||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
VOID
|
||||
FrLdrCheckCpuCompatiblity(VOID)
|
||||
{
|
||||
/* Nothing for now */
|
||||
}
|
||||
|
||||
VOID
|
||||
ArmInit(IN PARM_BOARD_CONFIGURATION_BLOCK BootContext)
|
||||
{
|
||||
|
|
|
@ -1788,7 +1788,51 @@ PcHwIdle(VOID)
|
|||
/*
|
||||
* No futher processing here.
|
||||
* Optionally implement HLT instruction handling.
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
VOID
|
||||
FrLdrCheckCpuCompatiblity(VOID)
|
||||
{
|
||||
INT CpuInformation[4] = {-1};
|
||||
ULONG NumberOfIds;
|
||||
|
||||
/* Check if the processor first supports ID 1 */
|
||||
__cpuid(CpuInformation, 0);
|
||||
|
||||
NumberOfIds = CpuInformation[0];
|
||||
|
||||
if (NumberOfIds == 0)
|
||||
{
|
||||
FrLdrBugCheckWithMessage(MISSING_HARDWARE_REQUIREMENTS,
|
||||
__FILE__,
|
||||
__LINE__,
|
||||
"ReactOS requires the CPUID instruction to return "
|
||||
"more than one supported ID.\n\n");
|
||||
}
|
||||
|
||||
/* NumberOfIds will be greater than 1 if the processor is new enough. */
|
||||
if (NumberOfIds == 1)
|
||||
{
|
||||
INT ProcessorFamily;
|
||||
|
||||
/* Get information. */
|
||||
__cpuid(CpuInformation, 1);
|
||||
|
||||
ProcessorFamily = (CpuInformation[0] >> 8) & 0xF;
|
||||
|
||||
/* If it's Family 4 or lower, bugcheck. */
|
||||
if(ProcessorFamily < 5)
|
||||
{
|
||||
FrLdrBugCheckWithMessage(MISSING_HARDWARE_REQUIREMENTS,
|
||||
__FILE__,
|
||||
__LINE__,
|
||||
"Processor is too old (family %u < 5)\n"
|
||||
"ReactOS requires a Pentium-level processor or newer.",
|
||||
ProcessorFamily);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -37,6 +37,9 @@ VOID BootMain(LPSTR CmdLine)
|
|||
|
||||
TRACE("BootMain() called.\n");
|
||||
|
||||
/* Check if the CPU is new enough */
|
||||
FrLdrCheckCpuCompatiblity();
|
||||
|
||||
if (!UiInitialize(FALSE))
|
||||
{
|
||||
UiMessageBoxCritical("Unable to initialize UI.\n");
|
||||
|
@ -50,10 +53,10 @@ VOID BootMain(LPSTR CmdLine)
|
|||
}
|
||||
|
||||
#ifdef _M_IX86
|
||||
HalpInitializePciStubs();
|
||||
HalpInitBusHandler();
|
||||
HalpInitializePciStubs();
|
||||
HalpInitBusHandler();
|
||||
#endif
|
||||
RunLoader();
|
||||
RunLoader();
|
||||
|
||||
quit:
|
||||
/* If we reach this point, something went wrong before, therefore reboot */
|
||||
|
|
|
@ -121,5 +121,6 @@
|
|||
VOID BootMain(LPSTR CmdLine);
|
||||
VOID LoadOperatingSystem(IN OperatingSystemItem* OperatingSystem);
|
||||
VOID RunLoader(VOID);
|
||||
VOID FrLdrCheckCpuCompatiblity(VOID);
|
||||
|
||||
#endif /* __FREELDR_H */
|
||||
|
|
Loading…
Reference in a new issue