mirror of
https://github.com/reactos/reactos.git
synced 2025-07-05 14:41:22 +00:00
[ntoskrnl]
handle the case where the cpu does not support returning the brand name CORE-7952 svn path=/trunk/; revision=63798
This commit is contained in:
parent
ab6a6d658b
commit
7a985425b0
1 changed files with 111 additions and 1 deletions
|
@ -226,6 +226,97 @@ Match:
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CmpGetIntelBrandString(OUT PCHAR CpuString)
|
||||||
|
{
|
||||||
|
ULONG BrandId, Ebx, Signature, Dummy;
|
||||||
|
|
||||||
|
/* Get the Brand Id */
|
||||||
|
CPUID(0x00000001, &Signature, &Ebx, &Dummy, &Dummy);
|
||||||
|
BrandId = Ebx & 0xFF;
|
||||||
|
|
||||||
|
switch (BrandId)
|
||||||
|
{
|
||||||
|
case 0x01:
|
||||||
|
strcpy(CpuString, "Intel(R) Celeron(R) processor");
|
||||||
|
break;
|
||||||
|
case 0x02:
|
||||||
|
case 0x04:
|
||||||
|
strcpy(CpuString, "Intel(R) Pentium(R) III processor");
|
||||||
|
break;
|
||||||
|
case 0x03:
|
||||||
|
if(Signature == 0x000006B1)
|
||||||
|
strcpy(CpuString, "Intel(R) Celeron(R) processor");
|
||||||
|
else
|
||||||
|
strcpy(CpuString, "Intel(R) Pentium(R) III Xeon(R) processor");
|
||||||
|
break;
|
||||||
|
case 0x06:
|
||||||
|
strcpy(CpuString, "Mobile Intel(R) Pentium(R) III Processor-M");
|
||||||
|
break;
|
||||||
|
case 0x08:
|
||||||
|
if(Signature >= 0x00000F13)
|
||||||
|
strcpy(CpuString, "Intel(R) Genuine Processor");
|
||||||
|
else
|
||||||
|
strcpy(CpuString, "Intel(R) Pentium(R) 4 processor");
|
||||||
|
break;
|
||||||
|
case 0x09:
|
||||||
|
strcpy(CpuString, "Intel(R) Pentium(R) 4 processor");
|
||||||
|
break;
|
||||||
|
case 0x0B:
|
||||||
|
if(Signature >= 0x00000F13)
|
||||||
|
strcpy(CpuString, "Intel(R) Xeon(R) processor");
|
||||||
|
else
|
||||||
|
strcpy(CpuString, "Intel(R) Xeon(R) processor MP");
|
||||||
|
break;
|
||||||
|
case 0x0C:
|
||||||
|
strcpy(CpuString, "Intel(R) Xeon(R) processor MP");
|
||||||
|
break;
|
||||||
|
case 0x0E:
|
||||||
|
if(Signature >= 0x00000F13)
|
||||||
|
strcpy(CpuString, "Mobile Intel(R) Pentium(R) 4 processor-M");
|
||||||
|
else
|
||||||
|
strcpy(CpuString, "Intel(R) Xeon(R) processor");
|
||||||
|
break;
|
||||||
|
case 0x12:
|
||||||
|
strcpy(CpuString, "Intel(R) Celeron(R) M processor");
|
||||||
|
break;
|
||||||
|
case 0x07:
|
||||||
|
case 0x0F:
|
||||||
|
case 0x13:
|
||||||
|
case 0x17:
|
||||||
|
strcpy(CpuString, "Mobile Intel(R) Celeron(R) processor");
|
||||||
|
break;
|
||||||
|
case 0x0A:
|
||||||
|
case 0x14:
|
||||||
|
strcpy(CpuString, "Intel(R) Celeron(R) Processor");
|
||||||
|
break;
|
||||||
|
case 0x15:
|
||||||
|
strcpy(CpuString, "Mobile Genuine Intel(R) Processor");
|
||||||
|
break;
|
||||||
|
case 0x16:
|
||||||
|
strcpy(CpuString, "Intel(R) Pentium(R) M processor");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
strcpy(CpuString, "Unknown Intel processor");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NTAPI
|
||||||
|
CmpGetVendorString(IN PKPRCB Prcb, OUT PCHAR CpuString)
|
||||||
|
{
|
||||||
|
/* Check if we have a Vendor String */
|
||||||
|
if (Prcb->VendorString[0])
|
||||||
|
{
|
||||||
|
strcpy(CpuString, Prcb->VendorString);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy(CpuString, "Unknown x86 processor");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
||||||
|
@ -238,7 +329,7 @@ CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBloc
|
||||||
HANDLE KeyHandle, BiosHandle, SystemHandle, FpuHandle, SectionHandle;
|
HANDLE KeyHandle, BiosHandle, SystemHandle, FpuHandle, SectionHandle;
|
||||||
CONFIGURATION_COMPONENT_DATA ConfigData;
|
CONFIGURATION_COMPONENT_DATA ConfigData;
|
||||||
CHAR Buffer[128];
|
CHAR Buffer[128];
|
||||||
ULONG ExtendedId, Dummy;
|
ULONG VendorId, ExtendedId, Dummy;
|
||||||
PKPRCB Prcb;
|
PKPRCB Prcb;
|
||||||
USHORT IndexTable[MaximumType + 1] = {0};
|
USHORT IndexTable[MaximumType + 1] = {0};
|
||||||
ANSI_STRING TempString;
|
ANSI_STRING TempString;
|
||||||
|
@ -424,6 +515,8 @@ CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBloc
|
||||||
if (!Prcb->CpuID)
|
if (!Prcb->CpuID)
|
||||||
{
|
{
|
||||||
/* Uh oh, no CPUID! */
|
/* Uh oh, no CPUID! */
|
||||||
|
PartialString = CpuString;
|
||||||
|
CmpGetVendorString(Prcb, PartialString);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -449,6 +542,23 @@ CmpInitializeMachineDependentConfiguration(IN PLOADER_PARAMETER_BLOCK LoaderBloc
|
||||||
/* Null-terminate it */
|
/* Null-terminate it */
|
||||||
CpuString[47] = ANSI_NULL;
|
CpuString[47] = ANSI_NULL;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CPUID(0x00000000, &Dummy, &VendorId, &Dummy, &Dummy);
|
||||||
|
PartialString = CpuString;
|
||||||
|
switch (VendorId)
|
||||||
|
{
|
||||||
|
case 'uneG': /* Intel */
|
||||||
|
CmpGetIntelBrandString(PartialString);
|
||||||
|
break;
|
||||||
|
case 'htuA': /* AMD */
|
||||||
|
/* FIXME */
|
||||||
|
CmpGetVendorString(Prcb, PartialString);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CmpGetVendorString(Prcb, PartialString);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Go back to user affinity */
|
/* Go back to user affinity */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue