#include <cportlib/cportlib.h>
#include <debug.h>
-
DBG_DEFAULT_CHANNEL(HWDETECT);
{
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry;
- EXTENDED_GEOMETRY ExtGeometry;
+ // EXTENDED_GEOMETRY ExtGeometry;
GEOMETRY Geometry;
ULONG Size;
DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST));
/* Get the disk geometry */
+#if 0 // This is somehow replaced by what PcDiskGetDriveGeometry() does internally.
ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY);
if (DiskGetExtendedDriveParameters(DriveNumber, &ExtGeometry, ExtGeometry.Size))
{
DiskGeometry->SectorsPerTrack = ExtGeometry.SectorsPerTrack;
DiskGeometry->NumberOfHeads = ExtGeometry.Heads;
}
- else if (MachDiskGetDriveGeometry(DriveNumber, &Geometry))
+ else
+#endif
+ if (PcDiskGetDriveGeometry(DriveNumber, &Geometry))
{
DiskGeometry->BytesPerSector = Geometry.BytesPerSector;
DiskGeometry->NumberOfCylinders = Geometry.Cylinders;
}
}
-static
+ULONG
+PcGetSerialPort(ULONG Index, PULONG Irq)
+{
+ static const ULONG PcIrq[MAX_COM_PORTS] = {4, 3, 4, 3};
+ PUSHORT BasePtr;
+
+ /*
+ * The BIOS data area 0x400 holds the address of the first valid COM port.
+ * Each COM port address is stored in a 2-byte field.
+ * Infos at: http://www.bioscentral.com/misc/bda.htm
+ */
+ BasePtr = (PUSHORT)0x400;
+ *Irq = PcIrq[Index];
+
+ return (ULONG) *(BasePtr + Index);
+}
+
VOID
-DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey)
+DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey, GET_SERIAL_PORT MachGetSerialPort, ULONG Count)
{
PCM_PARTIAL_RESOURCE_LIST PartialResourceList;
PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor;
PCM_SERIAL_DEVICE_DATA SerialDeviceData;
- ULONG Irq[MAX_COM_PORTS] = {4, 3, 4, 3};
+ ULONG Irq;
ULONG Base;
CHAR Buffer[80];
- PUSHORT BasePtr;
ULONG ControllerNumber = 0;
PCONFIGURATION_COMPONENT_DATA ControllerKey;
ULONG i;
TRACE("DetectSerialPorts()\n");
- /*
- * The BIOS data area 0x400 holds the address of the first valid COM port.
- * Each COM port address is stored in a 2-byte field.
- * Infos at: http://www.bioscentral.com/misc/bda.htm
- */
- BasePtr = (PUSHORT)0x400;
-
- for (i = 0; i < MAX_COM_PORTS; i++, BasePtr++)
+ for (i = 0; i < Count; i++)
{
- Base = (ULONG) * BasePtr;
+ Base = MachGetSerialPort(i, &Irq);
if ((Base == 0) || !CpDoesPortExist(UlongToPtr(Base)))
continue;
PartialDescriptor->Type = CmResourceTypeInterrupt;
PartialDescriptor->ShareDisposition = CmResourceShareUndetermined;
PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
- PartialDescriptor->u.Interrupt.Level = Irq[i];
- PartialDescriptor->u.Interrupt.Vector = Irq[i];
+ PartialDescriptor->u.Interrupt.Level = Irq;
+ PartialDescriptor->u.Interrupt.Vector = Irq;
PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF;
/* Set serial data (device specific) */
}
}
+
+// Implemented in i386vid.c, returns the VESA version
+USHORT BiosIsVesaSupported(VOID);
+BOOLEAN BiosIsVesaDdcSupported(VOID);
+BOOLEAN BiosVesaReadEdid(VOID);
+
static VOID
DetectDisplayController(PCONFIGURATION_COMPONENT_DATA BusKey)
{
/* Detect ISA/BIOS devices */
DetectBiosDisks(SystemKey, BusKey);
- DetectSerialPorts(BusKey);
+ DetectSerialPorts(BusKey, PcGetSerialPort, MAX_COM_PORTS);
DetectParallelPorts(BusKey);
DetectKeyboardController(BusKey);
DetectPS2Mouse(BusKey);
// TODO: Discover and set the machine type as the Component->Identifier
GetHarddiskConfigurationData = PcGetHarddiskConfigurationData;
+ FindPciBios = PcFindPciBios;
/* Detect buses */
DetectPciBios(SystemKey, &BusNumber);
MachVtbl.GetMemoryMap = PcMemGetMemoryMap;
MachVtbl.GetExtendedBIOSData = PcGetExtendedBIOSData;
MachVtbl.GetFloppyCount = PcGetFloppyCount;
- MachVtbl.DiskGetBootPath = PcDiskGetBootPath;
MachVtbl.DiskReadLogicalSectors = PcDiskReadLogicalSectors;
MachVtbl.DiskGetDriveGeometry = PcDiskGetDriveGeometry;
MachVtbl.DiskGetCacheableBlockCount = PcDiskGetCacheableBlockCount;
MachVtbl.InitializeBootDevices = PcInitializeBootDevices;
MachVtbl.HwDetect = PcHwDetect;
MachVtbl.HwIdle = PcHwIdle;
-
- // DiskGetPartitionEntry = DiskGetMbrPartitionEntry; // Default
}
VOID