Author: ion
Date: Thu May 10 22:04:41 2007
New Revision: 26678
URL:
http://svn.reactos.org/svn/reactos?rev=26678&view=rev
Log:
- Make CmpInitializeMachineDependentConfiguration create the FloatingPointProcessor
hardware key/ARC node.
Modified:
trunk/reactos/ntoskrnl/config/i386/cmhardwr.c
Modified: trunk/reactos/ntoskrnl/config/i386/cmhardwr.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/i386/cmhar…
==============================================================================
--- trunk/reactos/ntoskrnl/config/i386/cmhardwr.c (original)
+++ trunk/reactos/ntoskrnl/config/i386/cmhardwr.c Thu May 10 22:04:41 2007
@@ -28,7 +28,7 @@
OBJECT_ATTRIBUTES ObjectAttributes;
ULONG HavePae;
NTSTATUS Status;
- HANDLE KeyHandle, BiosHandle, SystemHandle;
+ HANDLE KeyHandle, BiosHandle, SystemHandle, FpuHandle;
ULONG Disposition;
CONFIGURATION_COMPONENT_DATA ConfigData;
CHAR Buffer[128];
@@ -129,7 +129,7 @@
ConfigData.ComponentEntry.Class = ProcessorClass;
ConfigData.ComponentEntry.Type = CentralProcessor;
ConfigData.ComponentEntry.Key = i;
- ConfigData.ComponentEntry.AffinityMask = 1 << i;
+ ConfigData.ComponentEntry.AffinityMask = AFFINITY_MASK(i);
ConfigData.ComponentEntry.Identifier = Buffer;
/* Check if the CPU doesn't support CPUID */
@@ -163,6 +163,41 @@
0xFFFFFFFF,
IndexTable);
if (!NT_SUCCESS(Status)) return(Status);
+
+ /* Check if we have an FPU */
+ if (KeI386NpxPresent)
+ {
+ /* Setup the Configuration Entry for the FPU */
+ RtlZeroMemory(&ConfigData, sizeof(ConfigData));
+ ConfigData.ComponentEntry.Class = ProcessorClass;
+ ConfigData.ComponentEntry.Type = FloatingPointProcessor;
+ ConfigData.ComponentEntry.Key = i;
+ ConfigData.ComponentEntry.AffinityMask = AFFINITY_MASK(i);
+ ConfigData.ComponentEntry.Identifier = Buffer;
+
+ /* For 386 cpus, the CPU String is the identifier */
+ if (Prcb->CpuType == 3) strcpy(Buffer, "80387");
+
+ /* Save the ID string length now that we've created it */
+ ConfigData.ComponentEntry.IdentifierLength = strlen(Buffer) + 1;
+
+ /* Initialize the registry configuration node for it */
+ Status = CmpInitializeRegistryNode(&ConfigData,
+ SystemHandle,
+ &FpuHandle,
+ InterfaceTypeUndefined,
+ 0xFFFFFFFF,
+ IndexTable);
+ if (!NT_SUCCESS(Status))
+ {
+ /* Failed, close the CPU handle and return */
+ NtClose(KeyHandle);
+ return Status;
+ }
+
+ /* Close this new handle */
+ NtClose(FpuHandle);
+ }
}
/* Free the configuration data */