[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:
Timo Kreuzer 2014-11-08 19:05:22 +00:00
parent 1b2bbd97fa
commit dc9b7a0dbe
4 changed files with 58 additions and 4 deletions

View file

@ -60,6 +60,12 @@ ULONG LenBits[] =
/* FUNCTIONS ******************************************************************/
VOID
FrLdrCheckCpuCompatiblity(VOID)
{
/* Nothing for now */
}
VOID
ArmInit(IN PARM_BOARD_CONFIGURATION_BLOCK BootContext)
{

View file

@ -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 */

View file

@ -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 */

View file

@ -121,5 +121,6 @@
VOID BootMain(LPSTR CmdLine);
VOID LoadOperatingSystem(IN OperatingSystemItem* OperatingSystem);
VOID RunLoader(VOID);
VOID FrLdrCheckCpuCompatiblity(VOID);
#endif /* __FREELDR_H */