From: Serge Gautherie Date: Tue, 3 Jan 2017 14:41:44 +0100 Subject: [FREELDR] freeldr\arch\i386\hardware.c: *Use same code patterns wrt PartialResourceList. CORE-12623 diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hardware.c b/reactos/boot/freeldr/freeldr/arch/i386/hardware.c index 7906439..fd68bc5 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/hardware.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/hardware.c @@ -230,6 +230,7 @@ VOID DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) { PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; PCM_PNP_BIOS_DEVICE_NODE DeviceNode; PCM_PNP_BIOS_INSTALLATION_CHECK InstData; PCONFIGURATION_COMPONENT_DATA BusKey; @@ -288,10 +289,10 @@ DetectPnpBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 1; - PartialResourceList->PartialDescriptors[0].Type = - CmResourceTypeDeviceSpecific; - PartialResourceList->PartialDescriptors[0].ShareDisposition = - CmResourceShareUndetermined; + + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; Ptr = (char *)(PartialResourceList->PartialDescriptors + PartialResourceList->Count); PnpBufferSizeLimit = Size - sizeof(CM_PARTIAL_RESOURCE_LIST); @@ -363,6 +364,7 @@ static PCM_PARTIAL_RESOURCE_LIST GetHarddiskConfigurationData(UCHAR DriveNumber, ULONG* pSize) { PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; PCM_DISK_GEOMETRY_DEVICE_DATA DiskGeometry; EXTENDED_GEOMETRY ExtGeometry; GEOMETRY Geometry; @@ -382,20 +384,23 @@ GetHarddiskConfigurationData(UCHAR DriveNumber, ULONG* pSize) ERR("Failed to allocate resource descriptor\n"); return NULL; } - memset(PartialResourceList, 0, Size); + + /* Initialize resource descriptor */ PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 1; - PartialResourceList->PartialDescriptors[0].Type = - CmResourceTypeDeviceSpecific; -// PartialResourceList->PartialDescriptors[0].ShareDisposition = -// PartialResourceList->PartialDescriptors[0].Flags = - PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = + + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; +// PartialDescriptor->ShareDisposition = +// PartialDescriptor->Flags = + PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); /* Get pointer to geometry data */ - DiskGeometry = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); + DiskGeometry = (PCM_DISK_GEOMETRY_DEVICE_DATA) + (PartialResourceList->PartialDescriptors + PartialResourceList->Count); /* Get the disk geometry */ ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY); @@ -513,8 +518,9 @@ DetectBiosFloppyPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey) ERR("Failed to allocate resource descriptor\n"); return; } - memset(PartialResourceList, 0, Size); + + /* Initialize resource descriptor */ PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 1; @@ -524,7 +530,8 @@ DetectBiosFloppyPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey) PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_FLOPPY_DEVICE_DATA); - FloppyData = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); + FloppyData = (PCM_FLOPPY_DEVICE_DATA) + (PartialResourceList->PartialDescriptors + PartialResourceList->Count); FloppyData->Version = 2; FloppyData->Revision = 0; FloppyData->MaxDensity = MaxDensity[FloppyType]; @@ -624,6 +631,7 @@ DetectSystem(VOID) { PCONFIGURATION_COMPONENT_DATA SystemKey; PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; PCM_INT13_DRIVE_PARAMETER Int13Drives; GEOMETRY Geometry; UCHAR DiskCount; @@ -641,20 +649,23 @@ DetectSystem(VOID) ERR("Failed to allocate resource descriptor\n"); return NULL; } + memset(PartialResourceList, 0, Size); /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 1; - PartialResourceList->PartialDescriptors[0].Type = CmResourceTypeDeviceSpecific; - PartialResourceList->PartialDescriptors[0].ShareDisposition = 0; - PartialResourceList->PartialDescriptors[0].Flags = 0; - PartialResourceList->PartialDescriptors[0].u.DeviceSpecificData.DataSize = + + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeDeviceSpecific; + PartialDescriptor->ShareDisposition = 0; + PartialDescriptor->Flags = 0; + PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount; /* Get harddisk Int13 geometry data */ - Int13Drives = (PVOID)(((ULONG_PTR)PartialResourceList) + sizeof(CM_PARTIAL_RESOURCE_LIST)); + Int13Drives = (PCM_INT13_DRIVE_PARAMETER) + (PartialResourceList->PartialDescriptors + PartialResourceList->Count); for (i = 0; i < DiskCount; i++) { if (MachDiskGetDriveGeometry(0x80 + i, &Geometry)) @@ -1043,6 +1054,8 @@ DetectSerialPointerPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey, return; } memset(PartialResourceList, 0, Size); + + /* Initialize resource descriptor */ PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 0; @@ -1142,8 +1155,8 @@ DetectSerialPorts(PCONFIGURATION_COMPONENT_DATA BusKey) PartialDescriptor->Flags = 0; PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_SERIAL_DEVICE_DATA); - SerialDeviceData = - (PCM_SERIAL_DEVICE_DATA)&PartialResourceList->PartialDescriptors[3]; + SerialDeviceData = (PCM_SERIAL_DEVICE_DATA) + (PartialResourceList->PartialDescriptors + PartialResourceList->Count); SerialDeviceData->BaudClock = 1843200; /* UART Clock frequency (Hertz) */ /* Create controller key */ @@ -1207,7 +1220,6 @@ DetectParallelPorts(PCONFIGURATION_COMPONENT_DATA BusKey) Size = sizeof(CM_PARTIAL_RESOURCE_LIST); if (Irq[i] != (ULONG) - 1) Size += sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = FrLdrHeapAlloc(Size, TAG_HW_RESOURCE_LIST); if (PartialResourceList == NULL) { @@ -1353,9 +1365,9 @@ DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey) ERR("Failed to allocate resource descriptor\n"); return; } + memset(PartialResourceList, 0, Size); /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 1; @@ -1365,7 +1377,8 @@ DetectKeyboardPeripheral(PCONFIGURATION_COMPONENT_DATA ControllerKey) PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; PartialDescriptor->u.DeviceSpecificData.DataSize = sizeof(CM_KEYBOARD_DEVICE_DATA); - KeyboardData = (PCM_KEYBOARD_DEVICE_DATA)(PartialDescriptor + 1); + KeyboardData = (PCM_KEYBOARD_DEVICE_DATA) + (PartialResourceList->PartialDescriptors + PartialResourceList->Count); KeyboardData->Version = 1; KeyboardData->Revision = 1; KeyboardData->Type = 4; @@ -1406,9 +1419,9 @@ DetectKeyboardController(PCONFIGURATION_COMPONENT_DATA BusKey) ERR("Failed to allocate resource descriptor\n"); return; } + memset(PartialResourceList, 0, Size); /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 3; @@ -1573,6 +1586,7 @@ VOID DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey) { PCM_PARTIAL_RESOURCE_LIST PartialResourceList; + PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptor; PCONFIGURATION_COMPONENT_DATA ControllerKey; PCONFIGURATION_COMPONENT_DATA PeripheralKey; ULONG Size; @@ -1595,12 +1609,13 @@ DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey) PartialResourceList->Count = 1; /* Set Interrupt */ - PartialResourceList->PartialDescriptors[0].Type = CmResourceTypeInterrupt; - PartialResourceList->PartialDescriptors[0].ShareDisposition = CmResourceShareUndetermined; - PartialResourceList->PartialDescriptors[0].Flags = CM_RESOURCE_INTERRUPT_LATCHED; - PartialResourceList->PartialDescriptors[0].u.Interrupt.Level = 12; - PartialResourceList->PartialDescriptors[0].u.Interrupt.Vector = 12; - PartialResourceList->PartialDescriptors[0].u.Interrupt.Affinity = 0xFFFFFFFF; + PartialDescriptor = &PartialResourceList->PartialDescriptors[0]; + PartialDescriptor->Type = CmResourceTypeInterrupt; + PartialDescriptor->ShareDisposition = CmResourceShareUndetermined; + PartialDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; + PartialDescriptor->u.Interrupt.Level = 12; + PartialDescriptor->u.Interrupt.Vector = 12; + PartialDescriptor->u.Interrupt.Affinity = 0xFFFFFFFF; /* Create controller key */ FldrCreateComponentKey(BusKey, @@ -1629,6 +1644,8 @@ DetectPS2Mouse(PCONFIGURATION_COMPONENT_DATA BusKey) return; } memset(PartialResourceList, 0, Size); + + /* Initialize resource descriptor */ PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 0; @@ -1716,9 +1733,9 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) ERR("Failed to allocate resource descriptor\n"); return; } + memset(PartialResourceList, 0, Size); /* Initialize resource descriptor */ - memset(PartialResourceList, 0, Size); PartialResourceList->Version = 1; PartialResourceList->Revision = 1; PartialResourceList->Count = 0;