mirror of
https://github.com/reactos/reactos.git
synced 2024-08-07 19:58:21 +00:00
[freeldr] When creating a component, provide at the same time its configuration data
svn path=/trunk/; revision=42873
This commit is contained in:
parent
4abf644be8
commit
413dcab765
|
@ -236,17 +236,6 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
DPRINTM(DPRINT_HWDETECT, "MaxNodeSize %u NodeCount %u\n", NodeSize, NodeCount);
|
||||
DPRINTM(DPRINT_HWDETECT, "Estimated buffer size %u\n", NodeSize * NodeCount);
|
||||
|
||||
/* Create component key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PNP BIOS",
|
||||
&BusKey);
|
||||
(*BusNumber)++;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + (NodeSize * NodeCount);
|
||||
PartialResourceList = MmHeapAlloc(Size);
|
||||
|
@ -312,16 +301,28 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
|
||||
DPRINTM(DPRINT_HWDETECT, "Real buffer size: %u\n", PnpBufferSize);
|
||||
DPRINTM(DPRINT_HWDETECT, "Resource size: %u\n", Size);
|
||||
|
||||
FldrSetConfigurationData(BusKey, PartialResourceList, Size);
|
||||
|
||||
/* Create component key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PNP BIOS",
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&BusKey);
|
||||
|
||||
(*BusNumber)++;
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static VOID
|
||||
SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
||||
ULONG DriveNumber)
|
||||
static PCM_PARTIAL_RESOURCE_LIST
|
||||
GetHarddiskConfigurationData(ULONG DriveNumber, ULONG* pSize)
|
||||
{
|
||||
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||||
PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry;
|
||||
|
@ -329,6 +330,11 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
GEOMETRY Geometry;
|
||||
ULONG Size;
|
||||
|
||||
//
|
||||
// Initialize returned size
|
||||
//
|
||||
*pSize = 0;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
sizeof(CM_DISK_GEOMETRY_DEVICE_DATA);
|
||||
|
@ -337,7 +343,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
{
|
||||
DPRINTM(DPRINT_HWDETECT,
|
||||
"Failed to allocate a full resource descriptor\n");
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(PartialResourceList, 0, Size);
|
||||
|
@ -374,7 +380,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
{
|
||||
DPRINTM(DPRINT_HWDETECT, "Reading disk geometry failed\n");
|
||||
MmHeapFree(PartialResourceList);
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
DPRINTM(DPRINT_HWDETECT,
|
||||
"Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
|
||||
|
@ -384,8 +390,11 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
DiskGeometry->SectorsPerTrack,
|
||||
DiskGeometry->BytesPerSector);
|
||||
|
||||
FldrSetConfigurationData(DiskKey, PartialResourceList, Size);
|
||||
MmHeapFree(PartialResourceList);
|
||||
//
|
||||
// Return configuration data
|
||||
//
|
||||
*pSize = Size;
|
||||
return PartialResourceList;
|
||||
}
|
||||
|
||||
typedef struct tagDISKCONTEXT
|
||||
|
@ -640,15 +649,6 @@ DetectBiosFloppyPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey)
|
|||
/* Set 'Identifier' value */
|
||||
sprintf(Identifier, "FLOPPY%ld", FloppyNumber + 1);
|
||||
|
||||
FldrCreateComponentKey(ControllerKey,
|
||||
PeripheralClass,
|
||||
FloppyDiskPeripheral,
|
||||
Input | Output,
|
||||
FloppyNumber,
|
||||
0xFFFFFFFF,
|
||||
Identifier,
|
||||
&PeripheralKey);
|
||||
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
sizeof(CM_FLOPPY_DEVICE_DATA);
|
||||
PartialResourceList = MmHeapAlloc(Size);
|
||||
|
@ -680,17 +680,26 @@ DetectBiosFloppyPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey)
|
|||
FloppyData->MaximumTrackValue = (FloppyType == 1) ? 39 : 79;
|
||||
FloppyData->DataTransferRate = 0;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(PeripheralKey, PartialResourceList, Size);
|
||||
FldrCreateComponentKey(ControllerKey,
|
||||
PeripheralClass,
|
||||
FloppyDiskPeripheral,
|
||||
Input | Output,
|
||||
FloppyNumber,
|
||||
0xFFFFFFFF,
|
||||
Identifier,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&PeripheralKey);
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static VOID
|
||||
DetectBiosFloppyController(PCONFIGURATION_COMPONENT_DATA BusKey,
|
||||
PCONFIGURATION_COMPONENT_DATA ControllerKey)
|
||||
DetectBiosFloppyController(PCONFIGURATION_COMPONENT_DATA BusKey)
|
||||
{
|
||||
PCONFIGURATION_COMPONENT_DATA ControllerKey;
|
||||
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||||
PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
|
||||
ULONG Size;
|
||||
|
@ -743,26 +752,35 @@ DetectBiosFloppyController(PCONFIGURATION_COMPONENT_DATA BusKey,
|
|||
PartialDescriptor->u.Dma.Channel = 2;
|
||||
PartialDescriptor->u.Dma.Port = 0;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(ControllerKey, PartialResourceList, Size);
|
||||
/* Create floppy disk controller */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
DiskController,
|
||||
Output | Input,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: DiskController\\0\n");
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
if (FloppyCount) DetectBiosFloppyPeripheral(ControllerKey);
|
||||
}
|
||||
|
||||
static VOID
|
||||
DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
||||
PCONFIGURATION_COMPONENT_DATA BusKey)
|
||||
static PCONFIGURATION_COMPONENT_DATA
|
||||
DetectSystem(VOID)
|
||||
{
|
||||
PCONFIGURATION_COMPONENT_DATA SystemKey;
|
||||
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||||
PCM_INT13_DRIVE_PARAMETER Int13Drives;
|
||||
GEOMETRY Geometry;
|
||||
PCONFIGURATION_COMPONENT_DATA DiskKey, ControllerKey;
|
||||
ULONG DiskCount;
|
||||
ULONG Size;
|
||||
ULONG i;
|
||||
BOOLEAN Changed, BootDriveReported = FALSE;
|
||||
CHAR BootPath[512];
|
||||
BOOLEAN Changed;
|
||||
|
||||
/* Count the number of visible drives */
|
||||
DiskReportError(FALSE);
|
||||
|
@ -794,18 +812,6 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
DPRINTM(DPRINT_HWDETECT, "BIOS reports %d harddisk%s\n",
|
||||
(int)DiskCount, (DiskCount == 1) ? "": "s");
|
||||
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
DiskController,
|
||||
Output | Input | Removable,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: DiskController\\0\n");
|
||||
|
||||
DetectBiosFloppyController(BusKey, ControllerKey);
|
||||
|
||||
/* Allocate resource descriptor */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount;
|
||||
|
@ -814,7 +820,7 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
{
|
||||
DPRINTM(DPRINT_HWDETECT,
|
||||
"Failed to allocate resource descriptor\n");
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Initialize resource descriptor */
|
||||
|
@ -832,9 +838,6 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
Int13Drives = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
for (i = 0; i < DiskCount; i++)
|
||||
{
|
||||
if (BootDrive == 0x80 + i)
|
||||
BootDriveReported = TRUE;
|
||||
|
||||
if (MachDiskGetDriveGeometry(0x80 + i, &Geometry))
|
||||
{
|
||||
Int13Drives[i].DriveSelect = 0x80 + i;
|
||||
|
@ -852,17 +855,91 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
Geometry.BytesPerSector);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(SystemKey, PartialResourceList, Size);
|
||||
|
||||
FldrCreateComponentKey(NULL,
|
||||
SystemClass,
|
||||
MaximumType,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&SystemKey);
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
return SystemKey;
|
||||
}
|
||||
|
||||
static ULONG
|
||||
GetDiskCount(PCONFIGURATION_COMPONENT_DATA BusKey)
|
||||
{
|
||||
PCONFIGURATION_COMPONENT_DATA System;
|
||||
ULONG ConfigurationDataLength;
|
||||
ULONG DiskCount = 0;
|
||||
|
||||
//
|
||||
// Get root component
|
||||
//
|
||||
System = BusKey;
|
||||
while (System->Parent)
|
||||
System = System->Parent;
|
||||
|
||||
//
|
||||
// Get root configuration data length
|
||||
//
|
||||
ConfigurationDataLength = System->ComponentEntry.ConfigurationDataLength;
|
||||
|
||||
//
|
||||
// We assume that nothing wrong happened, and that configuration
|
||||
// only consists of one CM_PARTIAL_RESOURCE_LIST entry, followed
|
||||
// by n entries of CM_INT13_DRIVE_PARAMETER
|
||||
//
|
||||
if (ConfigurationDataLength > 0)
|
||||
DiskCount = (ConfigurationDataLength - sizeof(CM_PARTIAL_RESOURCE_LIST))
|
||||
/ sizeof(CM_INT13_DRIVE_PARAMETER);
|
||||
|
||||
//
|
||||
// Return number of disks
|
||||
//
|
||||
DPRINTM(DPRINT_HWDETECT, "Retrieving %lu INT13 disks\\0\n");
|
||||
return DiskCount;
|
||||
};
|
||||
|
||||
static VOID
|
||||
DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA BusKey)
|
||||
{
|
||||
PCONFIGURATION_COMPONENT_DATA DiskKey, ControllerKey;
|
||||
BOOLEAN BootDriveReported = FALSE;
|
||||
ULONG i;
|
||||
ULONG DiskCount = GetDiskCount(BusKey);
|
||||
CHAR BootPath[512];
|
||||
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
DiskController,
|
||||
Output | Input,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: DiskController\\0\n");
|
||||
|
||||
/* Create and fill subkey for each harddisk */
|
||||
for (i = 0; i < DiskCount; i++)
|
||||
{
|
||||
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||||
ULONG Size;
|
||||
CHAR Identifier[20];
|
||||
|
||||
if (BootDrive == 0x80 + i)
|
||||
BootDriveReported = TRUE;
|
||||
|
||||
/* Get disk values */
|
||||
PartialResourceList = GetHarddiskConfigurationData(0x80 + i, &Size);
|
||||
GetHarddiskIdentifier(Identifier, 0x80 + i);
|
||||
|
||||
/* Create disk key */
|
||||
|
@ -873,10 +950,9 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
0x0,
|
||||
0xFFFFFFFF,
|
||||
Identifier,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&DiskKey);
|
||||
|
||||
/* Set disk values */
|
||||
SetHarddiskConfigurationData(DiskKey, 0x80 + i);
|
||||
}
|
||||
|
||||
/* Get the drive we're booting from */
|
||||
|
@ -1202,6 +1278,12 @@ DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey,
|
|||
}
|
||||
}
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
PartialResourceList.Version = 1;
|
||||
PartialResourceList.Revision = 1;
|
||||
PartialResourceList.Count = 0;
|
||||
|
||||
/* Create 'PointerPeripheral' key */
|
||||
FldrCreateComponentKey(ControllerKey,
|
||||
PeripheralClass,
|
||||
|
@ -1210,20 +1292,13 @@ DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey,
|
|||
0x0,
|
||||
0xFFFFFFFF,
|
||||
Identifier,
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) -
|
||||
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR),
|
||||
&PeripheralKey);
|
||||
|
||||
DPRINTM(DPRINT_HWDETECT,
|
||||
"Created key: PointerPeripheral\\0\n");
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
PartialResourceList.Version = 1;
|
||||
PartialResourceList.Revision = 1;
|
||||
PartialResourceList.Count = 0;
|
||||
|
||||
FldrSetConfigurationData(PeripheralKey,
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) -
|
||||
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
|
||||
"Created key: PointerPeripheral\\0\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1261,16 +1336,6 @@ DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
/* Set 'Identifier' value */
|
||||
sprintf(Buffer, "COM%ld", i + 1);
|
||||
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
SerialController,
|
||||
Output | Input | ConsoleIn | ConsoleOut,
|
||||
ControllerNumber,
|
||||
0xFFFFFFFF,
|
||||
Buffer,
|
||||
&ControllerKey);
|
||||
|
||||
/* Build full device descriptor */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) +
|
||||
|
@ -1318,8 +1383,18 @@ DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
(PCM_SERIAL_DEVICE_DATA)&PartialResourceList->PartialDescriptors[3];
|
||||
SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(ControllerKey, PartialResourceList, Size);
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
SerialController,
|
||||
Output | Input | ConsoleIn | ConsoleOut,
|
||||
ControllerNumber,
|
||||
0xFFFFFFFF,
|
||||
Buffer,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&ControllerKey);
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
if (!Rs232PortInUse(Base))
|
||||
|
@ -1365,16 +1440,6 @@ DetectParallelPorts(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
/* Set 'Identifier' value */
|
||||
sprintf(Buffer, "PARALLEL%ld", i + 1);
|
||||
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
ParallelController,
|
||||
Output,
|
||||
ControllerNumber,
|
||||
0xFFFFFFFF,
|
||||
Buffer,
|
||||
&ControllerKey);
|
||||
|
||||
/* Build full device descriptor */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST);
|
||||
if (Irq[i] != (ULONG)-1)
|
||||
|
@ -1415,8 +1480,18 @@ DetectParallelPorts(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(ControllerKey, PartialResourceList, Size);
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
ParallelController,
|
||||
Output,
|
||||
ControllerNumber,
|
||||
0xFFFFFFFF,
|
||||
Buffer,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&ControllerKey);
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
ControllerNumber++;
|
||||
|
@ -1509,17 +1584,6 @@ DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey)
|
|||
/* HACK: don't call DetectKeyboardDevice() as it fails in Qemu 0.8.2 */
|
||||
if (TRUE || DetectKeyboardDevice())
|
||||
{
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(ControllerKey,
|
||||
PeripheralClass,
|
||||
KeyboardPeripheral,
|
||||
Input | ConsoleIn,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCAT_ENHANCED",
|
||||
&PeripheralKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: KeyboardPeripheral\\0\n");
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
sizeof(CM_KEYBOARD_DEVICE_DATA);
|
||||
|
@ -1549,8 +1613,19 @@ DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey)
|
|||
KeyboardData->Subtype = 0;
|
||||
KeyboardData->KeyboardFlags = 0x20;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(PeripheralKey, PartialResourceList, Size);
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(ControllerKey,
|
||||
PeripheralClass,
|
||||
KeyboardPeripheral,
|
||||
Input | ConsoleIn,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCAT_ENHANCED",
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&PeripheralKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: KeyboardPeripheral\\0\n");
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
}
|
||||
}
|
||||
|
@ -1564,17 +1639,6 @@ DetectKeyboardController(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
PCONFIGURATION_COMPONENT_DATA ControllerKey;
|
||||
ULONG Size;
|
||||
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
KeyboardController,
|
||||
Input | ConsoleIn,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: KeyboardController\\0\n");
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
|
||||
|
@ -1619,8 +1683,19 @@ DetectKeyboardController(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
PartialDescriptor->u.Port.Start.HighPart = 0x0;
|
||||
PartialDescriptor->u.Port.Length = 1;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(ControllerKey, PartialResourceList, Size);
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
KeyboardController,
|
||||
Input | ConsoleIn,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: KeyboardController\\0\n");
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
DetectKeyboardPeripheral(ControllerKey);
|
||||
|
@ -1747,17 +1822,6 @@ DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
{
|
||||
DPRINTM(DPRINT_HWDETECT, "Detected PS2 port\n");
|
||||
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
PointerController,
|
||||
Input,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: PointerController\\0\n");
|
||||
|
||||
memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
|
||||
/* Initialize resource descriptor */
|
||||
|
@ -1773,15 +1837,29 @@ DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
PartialResourceList.PartialDescriptors[0].u.Interrupt.Vector = 0;
|
||||
PartialResourceList.PartialDescriptors[0].u.Interrupt.Affinity = 0xFFFFFFFF;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(ControllerKey,
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
/* Create controller key */
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
PointerController,
|
||||
Input,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST),
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: PointerController\\0\n");
|
||||
|
||||
if (DetectPS2AuxDevice())
|
||||
{
|
||||
DPRINTM(DPRINT_HWDETECT, "Detected PS2 mouse\n");
|
||||
|
||||
/* Initialize resource descriptor */
|
||||
memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
PartialResourceList.Version = 1;
|
||||
PartialResourceList.Revision = 1;
|
||||
PartialResourceList.Count = 0;
|
||||
|
||||
/* Create peripheral key */
|
||||
FldrCreateComponentKey(ControllerKey,
|
||||
ControllerClass,
|
||||
|
@ -1790,20 +1868,11 @@ DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"MICROSOFT PS2 MOUSE",
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) -
|
||||
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR),
|
||||
&PeripheralKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: PointerPeripheral\\0\n");
|
||||
|
||||
/* Initialize resource descriptor */
|
||||
memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
PartialResourceList.Version = 1;
|
||||
PartialResourceList.Revision = 1;
|
||||
PartialResourceList.Count = 0;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(PeripheralKey,
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) -
|
||||
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: PointerPeripheral\\0\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1850,6 +1919,8 @@ DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
0x0,
|
||||
0xFFFFFFFF,
|
||||
Buffer,
|
||||
NULL,
|
||||
0,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: DisplayController\\0\n");
|
||||
|
||||
|
@ -1864,16 +1935,6 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
PCONFIGURATION_COMPONENT_DATA BusKey;
|
||||
ULONG Size;
|
||||
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"ISA",
|
||||
&BusKey);
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
|
||||
|
@ -1894,12 +1955,24 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
PartialResourceList->Revision = 1;
|
||||
PartialResourceList->Count = 0;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(BusKey, PartialResourceList, Size);
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"ISA",
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&BusKey);
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
/* Detect ISA/BIOS devices */
|
||||
DetectBiosDisks(SystemKey, BusKey);
|
||||
DetectBiosDisks(BusKey);
|
||||
|
||||
DetectBiosFloppyController(BusKey);
|
||||
|
||||
DetectSerialPorts(BusKey);
|
||||
|
||||
|
@ -1924,7 +1997,7 @@ PcHwDetect(VOID)
|
|||
DPRINTM(DPRINT_HWDETECT, "DetectHardware()\n");
|
||||
|
||||
/* Create the 'System' key */
|
||||
FldrCreateSystemKey(&SystemKey);
|
||||
SystemKey = DetectSystem();
|
||||
|
||||
/* Detect buses */
|
||||
DetectPciBios(SystemKey, &BusNumber);
|
||||
|
|
|
@ -67,16 +67,6 @@ DetectAcpiBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
AcpiPresent = TRUE;
|
||||
LoaderBlock.Flags |= MB_FLAGS_ACPI_TABLE;
|
||||
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"ACPI BIOS",
|
||||
&BiosKey);
|
||||
|
||||
/* Get BIOS memory map */
|
||||
RtlZeroMemory(BiosMemoryMap, sizeof(BIOS_MEMORY_MAP) * 32);
|
||||
BiosMemoryMapEntryCount = PcMemGetMemoryMap(BiosMemoryMap,
|
||||
|
@ -109,10 +99,17 @@ DetectAcpiBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
DPRINTM(DPRINT_HWDETECT, "RSDT %p, data size %x\n", Rsdp->rsdt_physical_address,
|
||||
TableSize);
|
||||
|
||||
FldrSetConfigurationData(BiosKey,
|
||||
PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) + TableSize
|
||||
);
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"ACPI BIOS",
|
||||
PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) + TableSize,
|
||||
&BiosKey);
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
|
|
|
@ -61,6 +61,12 @@ DetectApmBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
|
||||
if (FindApmBios())
|
||||
{
|
||||
/* Create 'Configuration Data' value */
|
||||
memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
PartialResourceList.Version = 0;
|
||||
PartialResourceList.Revision = 0;
|
||||
PartialResourceList.Count = 0;
|
||||
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
|
@ -69,18 +75,11 @@ DetectApmBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"APM",
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) -
|
||||
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR),
|
||||
&BiosKey);
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
memset(&PartialResourceList, 0, sizeof(CM_PARTIAL_RESOURCE_LIST));
|
||||
PartialResourceList.Version = 0;
|
||||
PartialResourceList.Revision = 0;
|
||||
PartialResourceList.Count = 0;
|
||||
FldrSetConfigurationData(BiosKey,
|
||||
&PartialResourceList,
|
||||
sizeof(CM_PARTIAL_RESOURCE_LIST) -
|
||||
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR));
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
}
|
||||
|
|
|
@ -154,15 +154,6 @@ DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
{
|
||||
DPRINTM(DPRINT_HWDETECT, "Table size: %u\n", Table->Size);
|
||||
|
||||
FldrCreateComponentKey(BusKey,
|
||||
PeripheralClass,
|
||||
RealModeIrqRoutingTable,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCI Real-mode IRQ Routing Table",
|
||||
&TableKey);
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors) +
|
||||
2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + Table->Size;
|
||||
|
@ -194,8 +185,17 @@ DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey)
|
|||
memcpy(&PartialResourceList->PartialDescriptors[2],
|
||||
Table, Table->Size);
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(TableKey, PartialResourceList, Size);
|
||||
FldrCreateComponentKey(BusKey,
|
||||
PeripheralClass,
|
||||
RealModeIrqRoutingTable,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCI Real-mode IRQ Routing Table",
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&TableKey);
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
}
|
||||
}
|
||||
|
@ -215,19 +215,6 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
/* Report the PCI BIOS */
|
||||
if (FindPciBios(&BusData))
|
||||
{
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCI BIOS",
|
||||
&BiosKey);
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST,
|
||||
PartialDescriptors);
|
||||
|
@ -242,8 +229,21 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
/* Initialize resource descriptor */
|
||||
memset(PartialResourceList, 0, Size);
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(BiosKey, PartialResourceList, Size);
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCI BIOS",
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&BiosKey);
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
DetectPciIrqRoutingTable(BiosKey);
|
||||
|
@ -251,16 +251,6 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
/* Report PCI buses */
|
||||
for (i = 0; i < (ULONG)BusData.NoBuses; i++)
|
||||
{
|
||||
/* Create the bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCI",
|
||||
&BusKey);
|
||||
|
||||
/* Check if this is the first bus */
|
||||
if (i == 0)
|
||||
{
|
||||
|
@ -289,10 +279,6 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
memcpy(&PartialResourceList->PartialDescriptors[1],
|
||||
&BusData,
|
||||
sizeof(PCI_REGISTRY_INFO));
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(BusKey, PartialResourceList, Size);
|
||||
MmHeapFree(PartialResourceList);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -309,12 +295,22 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
|
||||
/* Initialize resource descriptor */
|
||||
memset(PartialResourceList, 0, Size);
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(BusKey, PartialResourceList, Size);
|
||||
MmHeapFree(PartialResourceList);
|
||||
}
|
||||
|
||||
/* Create the bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"PCI",
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&BusKey);
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
}
|
||||
|
|
|
@ -29,9 +29,8 @@ extern ULONG reactos_disk_count;
|
|||
extern ARC_DISK_SIGNATURE reactos_arc_disk_info[];
|
||||
extern char reactos_arc_strings[32][256];
|
||||
|
||||
static VOID
|
||||
SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
||||
ULONG DriveNumber)
|
||||
static PCM_PARTIAL_RESOURCE_LIST
|
||||
GetHarddiskConfigurationData(ULONG DriveNumber, ULONG* pSize)
|
||||
{
|
||||
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||||
PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry;
|
||||
|
@ -39,6 +38,11 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
GEOMETRY Geometry;
|
||||
ULONG Size;
|
||||
|
||||
//
|
||||
// Initialize returned size
|
||||
//
|
||||
*pSize = 0;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
sizeof(CM_DISK_GEOMETRY_DEVICE_DATA);
|
||||
|
@ -47,7 +51,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
{
|
||||
DPRINTM(DPRINT_HWDETECT,
|
||||
"Failed to allocate a full resource descriptor\n");
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(PartialResourceList, 0, Size);
|
||||
|
@ -78,7 +82,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
{
|
||||
DPRINTM(DPRINT_HWDETECT, "Reading disk geometry failed\n");
|
||||
MmHeapFree(PartialResourceList);
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
DPRINTM(DPRINT_HWDETECT,
|
||||
"Disk %x: %u Cylinders %u Heads %u Sectors %u Bytes\n",
|
||||
|
@ -88,8 +92,11 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey,
|
|||
DiskGeometry->SectorsPerTrack,
|
||||
DiskGeometry->BytesPerSector);
|
||||
|
||||
FldrSetConfigurationData(DiskKey, PartialResourceList, Size);
|
||||
MmHeapFree(PartialResourceList);
|
||||
//
|
||||
// Return configuration data
|
||||
//
|
||||
*pSize = Size;
|
||||
return PartialResourceList;
|
||||
}
|
||||
|
||||
|
||||
|
@ -202,17 +209,7 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
DPRINTM(DPRINT_HWDETECT, "BIOS reports %d harddisk%s\n",
|
||||
(int)DiskCount, (DiskCount == 1) ? "": "s");
|
||||
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
DiskController,
|
||||
Output | Input | Removable,
|
||||
0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: DiskController\\0\n");
|
||||
|
||||
//DetectBiosFloppyController(BusKey, ControllerKey);
|
||||
//DetectBiosFloppyController(BusKey);
|
||||
|
||||
/* Allocate resource descriptor */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
|
||||
|
@ -258,16 +255,29 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
}
|
||||
}
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(SystemKey, PartialResourceList, Size);
|
||||
FldrCreateComponentKey(BusKey,
|
||||
ControllerClass,
|
||||
DiskController,
|
||||
Output | Input,
|
||||
0,
|
||||
0xFFFFFFFF,
|
||||
NULL,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&ControllerKey);
|
||||
DPRINTM(DPRINT_HWDETECT, "Created key: DiskController\\0\n");
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
/* Create and fill subkey for each harddisk */
|
||||
for (i = 0; i < DiskCount; i++)
|
||||
{
|
||||
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||||
ULONG Size;
|
||||
CHAR Identifier[20];
|
||||
|
||||
/* Get disk values */
|
||||
PartialResourceList = GetHarddiskConfigurationData(0x80 + i, &Size);
|
||||
GetHarddiskIdentifier(Identifier, 0x80 + i);
|
||||
|
||||
/* Create disk key */
|
||||
|
@ -278,10 +288,12 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey,
|
|||
0,
|
||||
0xFFFFFFFF,
|
||||
Identifier,
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&DiskKey);
|
||||
|
||||
/* Set disk values */
|
||||
SetHarddiskConfigurationData(DiskKey, 0x80 + i);
|
||||
|
||||
if (PartialResourceList)
|
||||
MmHeapFree(PartialResourceList);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,19 +304,6 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
PCONFIGURATION_COMPONENT_DATA BusKey;
|
||||
ULONG Size;
|
||||
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"ISA",
|
||||
&BusKey);
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) -
|
||||
sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR);
|
||||
|
@ -322,10 +321,22 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber)
|
|||
PartialResourceList->Revision = 1;
|
||||
PartialResourceList->Count = 0;
|
||||
|
||||
/* Set 'Configuration Data' value */
|
||||
FldrSetConfigurationData(BusKey, PartialResourceList, Size);
|
||||
MmHeapFree(PartialResourceList);
|
||||
/* Create new bus key */
|
||||
FldrCreateComponentKey(SystemKey,
|
||||
AdapterClass,
|
||||
MultiFunctionAdapter,
|
||||
0x0,
|
||||
0x0,
|
||||
0xFFFFFFFF,
|
||||
"ISA",
|
||||
PartialResourceList,
|
||||
Size,
|
||||
&BusKey);
|
||||
|
||||
/* Increment bus number */
|
||||
(*BusNumber)++;
|
||||
|
||||
MmHeapFree(PartialResourceList);
|
||||
|
||||
/* Detect ISA/BIOS devices */
|
||||
DetectBiosDisks(SystemKey, BusKey);
|
||||
|
|
|
@ -394,6 +394,8 @@ VOID OfwCopyDeviceTree
|
|||
0,
|
||||
(ULONG)-1,
|
||||
NULL,
|
||||
NULL,
|
||||
0,
|
||||
&NewKey);
|
||||
|
||||
/* Add properties */
|
||||
|
|
|
@ -20,6 +20,12 @@ PCONFIGURATION_COMPONENT_DATA FldrArcHwTreeRoot;
|
|||
|
||||
BOOLEAN UseRealHeap = FALSE;
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
FldrSetConfigurationData(IN PCONFIGURATION_COMPONENT_DATA ComponentData,
|
||||
IN PCM_PARTIAL_RESOURCE_LIST ResourceList,
|
||||
IN ULONG Size);
|
||||
|
||||
/* FUNCTIONS ******************************************************************/
|
||||
|
||||
PVOID
|
||||
|
@ -139,6 +145,8 @@ FldrCreateComponentKey(IN PCONFIGURATION_COMPONENT_DATA SystemNode,
|
|||
IN ULONG Key,
|
||||
IN ULONG Affinity,
|
||||
IN PCHAR IdentifierString,
|
||||
IN PCM_PARTIAL_RESOURCE_LIST ResourceList,
|
||||
IN ULONG Size,
|
||||
OUT PCONFIGURATION_COMPONENT_DATA *ComponentKey)
|
||||
{
|
||||
PCONFIGURATION_COMPONENT_DATA ComponentData;
|
||||
|
@ -152,7 +160,8 @@ FldrCreateComponentKey(IN PCONFIGURATION_COMPONENT_DATA SystemNode,
|
|||
ComponentData->Parent = SystemNode;
|
||||
|
||||
/* Link us to the parent */
|
||||
FldrLinkToParent(SystemNode, ComponentData);
|
||||
if (SystemNode)
|
||||
FldrLinkToParent(SystemNode, ComponentData);
|
||||
|
||||
/* Set us up */
|
||||
Component = &ComponentData->ComponentEntry;
|
||||
|
@ -166,6 +175,10 @@ FldrCreateComponentKey(IN PCONFIGURATION_COMPONENT_DATA SystemNode,
|
|||
if (IdentifierString)
|
||||
FldrSetIdentifier(ComponentData, IdentifierString);
|
||||
|
||||
/* Set configuration data */
|
||||
if (ResourceList)
|
||||
FldrSetConfigurationData(ComponentData, ResourceList, Size);
|
||||
|
||||
/* Return the child */
|
||||
*ComponentKey = ComponentData;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue