#include <freeldr.h>
#include <debug.h>
+DBG_DEFAULT_CHANNEL(HWDETECT);
/* GLOBALS ********************************************************************/
+/* Strings corresponding to CONFIGURATION_TYPE */
+const PCSTR ArcTypes[MaximumType + 1] = // CmTypeName
+{
+ "System",
+ "CentralProcessor",
+ "FloatingPointProcessor",
+ "PrimaryICache",
+ "PrimaryDCache",
+ "SecondaryICache",
+ "SecondaryDCache",
+ "SecondaryCache",
+ "EisaAdapter",
+ "TcAdapter",
+ "ScsiAdapter",
+ "DtiAdapter",
+ "MultifunctionAdapter",
+ "DiskController",
+ "TapeController",
+ "CdRomController",
+ "WormController",
+ "SerialController",
+ "NetworkController",
+ "DisplayController",
+ "ParallelController",
+ "PointerController",
+ "KeyboardController",
+ "AudioController",
+ "OtherController",
+ "DiskPeripheral",
+ "FloppyDiskPeripheral",
+ "TapePeripheral",
+ "ModemPeripheral",
+ "MonitorPeripheral",
+ "PrinterPeripheral",
+ "PointerPeripheral",
+ "KeyboardPeripheral",
+ "TerminalPeripheral",
+ "OtherPeripheral",
+ "LinePeripheral",
+ "NetworkPeripheral",
+ "SystemMemory",
+ "DockingInformation",
+ "RealModeIrqRoutingTable",
+ "RealModePCIEnumeration",
+ "Undefined"
+};
+
PCONFIGURATION_COMPONENT_DATA FldrArcHwTreeRoot;
// ARC Disk Information
// ARC Component Configuration Routines
//
-VOID
-NTAPI
-FldrSetIdentifier(IN PCONFIGURATION_COMPONENT_DATA ComponentData,
- IN PCHAR IdentifierString)
+static VOID
+FldrSetIdentifier(
+ _In_ PCONFIGURATION_COMPONENT Component,
+ _In_ PCSTR IdentifierString)
{
- PCONFIGURATION_COMPONENT Component = &ComponentData->ComponentEntry;
SIZE_T IdentifierLength;
PCHAR Identifier;
}
VOID
-NTAPI
-FldrSetConfigurationData(IN PCONFIGURATION_COMPONENT_DATA ComponentData,
- IN PCM_PARTIAL_RESOURCE_LIST ResourceList,
- IN ULONG Size)
+FldrSetConfigurationData(
+ _Inout_ PCONFIGURATION_COMPONENT_DATA ComponentData,
+ _In_ PCM_PARTIAL_RESOURCE_LIST ResourceList,
+ _In_ ULONG Size)
{
/* Set component information */
ComponentData->ConfigurationData = ResourceList;
}
VOID
-NTAPI
-FldrCreateSystemKey(OUT PCONFIGURATION_COMPONENT_DATA *SystemNode)
+FldrCreateSystemKey(
+ _Out_ PCONFIGURATION_COMPONENT_DATA* SystemNode,
+ _In_ PCSTR IdentifierString)
{
PCONFIGURATION_COMPONENT Component;
Component->Key = 0;
Component->AffinityMask = 0xFFFFFFFF;
+ /* Set identifier */
+ if (IdentifierString)
+ FldrSetIdentifier(Component, IdentifierString);
+
/* Return the node */
*SystemNode = FldrArcHwTreeRoot;
}
static VOID
-NTAPI
-FldrLinkToParent(IN PCONFIGURATION_COMPONENT_DATA Parent,
- IN PCONFIGURATION_COMPONENT_DATA Child)
+FldrLinkToParent(
+ _In_ PCONFIGURATION_COMPONENT_DATA Parent,
+ _In_ PCONFIGURATION_COMPONENT_DATA Child)
{
PCONFIGURATION_COMPONENT_DATA Sibling;
}
VOID
-NTAPI
-FldrCreateComponentKey(IN PCONFIGURATION_COMPONENT_DATA SystemNode,
- IN CONFIGURATION_CLASS Class,
- IN CONFIGURATION_TYPE Type,
- IN IDENTIFIER_FLAG Flags,
- IN ULONG Key,
- IN ULONG Affinity,
- IN PCHAR IdentifierString,
- IN PCM_PARTIAL_RESOURCE_LIST ResourceList,
- IN ULONG Size,
- OUT PCONFIGURATION_COMPONENT_DATA *ComponentKey)
+FldrCreateComponentKey(
+ _In_ PCONFIGURATION_COMPONENT_DATA SystemNode,
+ _In_ CONFIGURATION_CLASS Class,
+ _In_ CONFIGURATION_TYPE Type,
+ _In_ IDENTIFIER_FLAG Flags,
+ _In_ ULONG Key,
+ _In_ ULONG Affinity,
+ _In_ PCSTR IdentifierString,
+ _In_ PCM_PARTIAL_RESOURCE_LIST ResourceList,
+ _In_ ULONG Size,
+ _Out_ PCONFIGURATION_COMPONENT_DATA* ComponentKey)
{
PCONFIGURATION_COMPONENT_DATA ComponentData;
PCONFIGURATION_COMPONENT Component;
/* Set identifier */
if (IdentifierString)
- FldrSetIdentifier(ComponentData, IdentifierString);
+ FldrSetIdentifier(Component, IdentifierString);
/* Set configuration data */
if (ResourceList)
FldrSetConfigurationData(ComponentData, ResourceList, Size);
+ TRACE("Created key: %s\\%d\n", ArcTypes[min(Type, MaximumType)], Key);
+
/* Return the child */
*ComponentKey = ComponentData;
}
/* Create the root node */
if (ArmHwDetectRan++) return RootNode;
- FldrCreateSystemKey(&RootNode);
+ FldrCreateSystemKey(&RootNode, "");
/*
* TODO:
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"ACPI BIOS",
PartialResourceList,
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
+ 0,
0,
0xFFFFFFFF,
"APM",
FldrCreateComponentKey(BusKey,
PeripheralClass,
RealModeIrqRoutingTable,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"PCI Real-mode IRQ Routing Table",
PartialResourceList,
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"PCI BIOS",
PartialResourceList,
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"PCI",
PartialResourceList,
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"PNP BIOS",
PartialResourceList,
PeripheralClass,
PointerPeripheral,
Input,
- 0x0,
+ 0,
0xFFFFFFFF,
Identifier,
PartialResourceList,
Size,
&PeripheralKey);
-
- TRACE("Created key: PointerPeripheral\\0\n");
}
}
PCM_SERIAL_DEVICE_DATA SerialDeviceData;
ULONG Irq;
ULONG Base;
- CHAR Buffer[80];
+ CHAR Identifier[80];
ULONG ControllerNumber = 0;
PCONFIGURATION_COMPONENT_DATA ControllerKey;
ULONG i;
TRACE("Found COM%u port at 0x%x\n", i + 1, Base);
/* Set 'Identifier' value */
- sprintf(Buffer, "COM%ld", i + 1);
+ RtlStringCbPrintfA(Identifier, sizeof(Identifier), "COM%ld", i + 1);
/* Build full device descriptor */
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
Output | Input | ConsoleIn | ConsoleOut,
ControllerNumber,
0xFFFFFFFF,
- Buffer,
+ Identifier,
PartialResourceList,
Size,
&ControllerKey);
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
ULONG Irq[MAX_LPT_PORTS] = {7, 5, (ULONG) - 1};
- CHAR Buffer[80];
+ CHAR Identifier[80];
PCONFIGURATION_COMPONENT_DATA ControllerKey;
PUSHORT BasePtr;
ULONG Base;
TRACE("Parallel port %u: %x\n", ControllerNumber, Base);
/* Set 'Identifier' value */
- sprintf(Buffer, "PARALLEL%ld", i + 1);
+ RtlStringCbPrintfA(Identifier, sizeof(Identifier), "PARALLEL%ld", i + 1);
/* Build full device descriptor */
Size = sizeof(CM_PARTIAL_RESOURCE_LIST);
Output,
ControllerNumber,
0xFFFFFFFF,
- Buffer,
+ Identifier,
PartialResourceList,
Size,
&ControllerKey);
PeripheralClass,
KeyboardPeripheral,
Input | ConsoleIn,
- 0x0,
+ 0,
0xFFFFFFFF,
"PCAT_ENHANCED",
PartialResourceList,
Size,
&PeripheralKey);
- TRACE("Created key: KeyboardPeripheral\\0\n");
}
}
ControllerClass,
KeyboardController,
Input | ConsoleIn,
- 0x0,
+ 0,
0xFFFFFFFF,
NULL,
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: KeyboardController\\0\n");
DetectKeyboardPeripheral(ControllerKey);
}
ControllerClass,
PointerController,
Input,
- 0x0,
+ 0,
0xFFFFFFFF,
NULL,
PartialResourceList,
sizeof(CM_PARTIAL_RESOURCE_LIST),
&ControllerKey);
- TRACE("Created key: PointerController\\0\n");
if (DetectPS2AuxDevice())
{
ControllerClass,
PointerPeripheral,
Input,
- 0x0,
+ 0,
0xFFFFFFFF,
"MICROSOFT PS2 MOUSE",
PartialResourceList,
Size,
&PeripheralKey);
- TRACE("Created key: PointerPeripheral\\0\n");
}
}
}
static VOID
DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
{
- CHAR Buffer[80];
+ PCSTR Identifier;
PCONFIGURATION_COMPONENT_DATA ControllerKey;
USHORT VesaVersion;
}
if (VesaVersion >= 0x0200)
- {
- strcpy(Buffer, "VBE Display");
- }
+ Identifier = "VBE Display";
else
- {
- strcpy(Buffer, "VGA Display");
- }
+ Identifier = "VGA Display";
FldrCreateComponentKey(BusKey,
ControllerClass,
DisplayController,
- 0x0,
- 0x0,
+ Output | ConsoleOut,
+ 0,
0xFFFFFFFF,
- Buffer,
+ Identifier,
NULL,
0,
&ControllerKey);
- TRACE("Created key: DisplayController\\0\n");
/* FIXME: Add display peripheral (monitor) data */
if (VesaVersion != 0)
if (BiosVesaReadEdid())
{
TRACE("EDID data read successfully!\n");
-
}
}
}
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"ISA",
PartialResourceList,
TRACE("DetectHardware()\n");
/* Create the 'System' key */
- FldrCreateSystemKey(&SystemKey);
// TODO: Discover and set the other machine types
- FldrSetIdentifier(SystemKey, "AT/AT COMPATIBLE");
+ FldrCreateSystemKey(&SystemKey, "AT/AT COMPATIBLE");
GetHarddiskConfigurationData = PcGetHarddiskConfigurationData;
FindPciBios = PcFindPciBios;
Ptr = GetInt1eTable();
/* Set 'Identifier' value */
- sprintf(Identifier, "FLOPPY%d", FloppyNumber + 1);
+ RtlStringCbPrintfA(Identifier, sizeof(Identifier), "FLOPPY%d", FloppyNumber + 1);
Size = sizeof(CM_PARTIAL_RESOURCE_LIST) +
sizeof(CM_FLOPPY_DEVICE_DATA);
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: DiskController\\0\n");
if (FloppyCount)
DetectBiosFloppyPeripheral(ControllerKey);
/* Create and fill subkey for each harddisk */
for (i = 0; i < DiskCount; i++)
{
- PCHAR Identifier;
+ PCSTR Identifier;
DriveNumber = 0x80 + i;
PartialResourceList,
Size,
&PeripheralKey);
- TRACE("Created key: FloppyDiskPeripheral\\%d\n", FloppyNumber);
}
}
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: DiskController\\0\n");
if (FloppyCount)
DetectBiosFloppyPeripheral(ControllerKey);
/* Create and fill subkey for each harddisk */
for (i = 0; i < DiskCount; i++)
{
- PCHAR Identifier;
+ PCSTR Identifier;
DriveNumber = 0x80 + i;
PartialResourceList,
Size,
&DiskKey);
- TRACE("Created key: DiskPeripheral\\%d\n", i);
}
}
PartialResourceList,
Size,
&PeripheralKey);
- TRACE("Created key: PointerPeripheral\\0\n");
}
static VOID
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: PointerController\\0\n");
DetectPointerPeripheral(ControllerKey);
}
PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
PCM_KEYBOARD_DEVICE_DATA KeyboardData;
PCONFIGURATION_COMPONENT_DATA PeripheralKey;
- CHAR Identifier[80];
+ PCSTR Identifier;
ULONG Size;
REGS Regs;
UCHAR KeyboardType = ((*(PUCHAR)MEM_KEYB_TYPE & 0x40) >> 5) |
((Regs.b.al & 0x01) << 1);
if (KeyboardType == 0)
- RtlStringCbPrintfA(Identifier, sizeof(Identifier), "PC98_NmodeKEY");
+ Identifier = "PC98_NmodeKEY";
else if (KeyboardType == 2)
- RtlStringCbPrintfA(Identifier, sizeof(Identifier), "PC98_106KEY");
+ Identifier = "PC98_106KEY";
else
- RtlStringCbPrintfA(Identifier, sizeof(Identifier), "PC98_LaptopKEY");
+ Identifier = "PC98_LaptopKEY";
/* Create controller key */
FldrCreateComponentKey(ControllerKey,
PartialResourceList,
Size,
&PeripheralKey);
- TRACE("Created key: KeyboardPeripheral\\0\n");
}
static VOID
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: KeyboardController\\0\n");
DetectKeyboardPeripheral(ControllerKey);
}
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: ParallelController\\0\n");
}
static VOID
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: SerialController\\%d\n", ControllerNumber);
++ControllerNumber;
}
PartialResourceList,
Size,
&ControllerKey);
- TRACE("Created key: SerialController\\%d\n", ControllerNumber);
++ControllerNumber;
}
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
+ 0,
0,
0xFFFFFFFF,
"ISA",
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
+ 0,
0,
0xFFFFFFFF,
"EISA",
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"PNP BIOS",
PartialResourceList,
TRACE("DetectHardware()\n");
/* Create the 'System' key */
- FldrCreateSystemKey(&SystemKey);
- FldrSetIdentifier(SystemKey, "NEC PC-98");
+ FldrCreateSystemKey(&SystemKey, "NEC PC-98");
GetHarddiskConfigurationData = Pc98GetHarddiskConfigurationData;
FindPciBios = PcFindPciBios;
static VOID
DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
{
- CHAR Buffer[80];
PCONFIGURATION_COMPONENT_DATA ControllerKey;
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
if (FrameBufferSize == 0)
return;
- strcpy(Buffer, "NV2A Framebuffer");
-
Size = sizeof(CM_PARTIAL_RESOURCE_LIST);
PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST);
if (PartialResourceList == NULL)
FldrCreateComponentKey(BusKey,
ControllerClass,
DisplayController,
- 0x0,
- 0x0,
+ Output | ConsoleOut,
+ 0,
0xFFFFFFFF,
- Buffer,
+ "NV2A Framebuffer",
PartialResourceList,
Size,
&ControllerKey);
-
- TRACE("Created key: DisplayController\\0\n");
}
static
FldrCreateComponentKey(SystemKey,
AdapterClass,
MultiFunctionAdapter,
- 0x0,
- 0x0,
+ 0,
+ 0,
0xFFFFFFFF,
"ISA",
PartialResourceList,
TRACE("DetectHardware()\n");
/* Create the 'System' key */
- FldrCreateSystemKey(&SystemKey);
- FldrSetIdentifier(SystemKey, "Original Xbox (PC/AT like)");
+ FldrCreateSystemKey(&SystemKey, "Original Xbox (PC/AT like)");
GetHarddiskConfigurationData = XboxGetHarddiskConfigurationData;
FindPciBios = XboxFindPciBios;
// ARC Component Configuration Routines
//
VOID
-NTAPI
-FldrSetIdentifier(
- IN PCONFIGURATION_COMPONENT_DATA ComponentData,
- IN PCHAR IdentifierString
-);
-
-VOID
-NTAPI
FldrSetConfigurationData(
- IN PCONFIGURATION_COMPONENT_DATA ComponentData,
- IN PCM_PARTIAL_RESOURCE_LIST ResourceList,
- IN ULONG Size
-);
+ _Inout_ PCONFIGURATION_COMPONENT_DATA ComponentData,
+ _In_ PCM_PARTIAL_RESOURCE_LIST ResourceList,
+ _In_ ULONG Size);
VOID
-NTAPI
FldrCreateSystemKey(
- OUT PCONFIGURATION_COMPONENT_DATA *SystemKey
-);
+ _Out_ PCONFIGURATION_COMPONENT_DATA* SystemNode,
+ _In_ PCSTR IdentifierString);
VOID
-NTAPI
FldrCreateComponentKey(
- IN PCONFIGURATION_COMPONENT_DATA SystemKey,
- IN CONFIGURATION_CLASS Class,
- IN CONFIGURATION_TYPE Type,
- IN IDENTIFIER_FLAG Flags,
- IN ULONG Key,
- IN ULONG Affinity,
- IN PCHAR IdentifierString,
- IN PCM_PARTIAL_RESOURCE_LIST ResourceList,
- IN ULONG Size,
- OUT PCONFIGURATION_COMPONENT_DATA *ComponentKey
-);
+ _In_ PCONFIGURATION_COMPONENT_DATA SystemNode,
+ _In_ CONFIGURATION_CLASS Class,
+ _In_ CONFIGURATION_TYPE Type,
+ _In_ IDENTIFIER_FLAG Flags,
+ _In_ ULONG Key,
+ _In_ ULONG Affinity,
+ _In_ PCSTR IdentifierString,
+ _In_ PCM_PARTIAL_RESOURCE_LIST ResourceList,
+ _In_ ULONG Size,
+ _Out_ PCONFIGURATION_COMPONENT_DATA* ComponentKey);
/* EOF */