From 52fa6c202f4d213fd9d62978bff7e241573ac61e Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Tue, 12 Feb 2008 04:22:39 +0000 Subject: [PATCH] Better organize FreeLDR ARM files -- there are no more stubs now. We have the ReactOS kernel loader in loader.c, just like on x86, and the ARM FreeLDR HAL/Mach routines in macharm.c svn path=/trunk/; revision=32311 --- .../freeldr/arch/arm/{stubs.c => loader.c} | 146 +----------------- .../boot/freeldr/freeldr/arch/arm/macharm.c | 142 +++++++++++++++++ .../boot/freeldr/freeldr/freeldr_arch.rbuild | 4 +- 3 files changed, 146 insertions(+), 146 deletions(-) rename reactos/boot/freeldr/freeldr/arch/arm/{stubs.c => loader.c} (52%) diff --git a/reactos/boot/freeldr/freeldr/arch/arm/stubs.c b/reactos/boot/freeldr/freeldr/arch/arm/loader.c similarity index 52% rename from reactos/boot/freeldr/freeldr/arch/arm/stubs.c rename to reactos/boot/freeldr/freeldr/arch/arm/loader.c index 745a202b113..75106d5171a 100644 --- a/reactos/boot/freeldr/freeldr/arch/arm/stubs.c +++ b/reactos/boot/freeldr/freeldr/arch/arm/loader.c @@ -1,8 +1,8 @@ /* * PROJECT: ReactOS Boot Loader * LICENSE: GPL - See COPYING in the top level directory - * FILE: boot/freeldr/arch/arm/stubs.c - * PURPOSE: Non-completed ARM hardware-specific routines + * FILE: boot/freeldr/arch/arm/loader.c + * PURPOSE: ARM Kernel Loader * PROGRAMMERS: ReactOS Portable Systems Group */ @@ -23,31 +23,6 @@ extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint; /* FUNCTIONS ******************************************************************/ -BOOLEAN -ArmDiskGetDriveGeometry(IN ULONG DriveNumber, - OUT PGEOMETRY Geometry) -{ - ASSERT(gRamDiskBase == NULL); - return FALSE; -} - -BOOLEAN -ArmDiskReadLogicalSectors(IN ULONG DriveNumber, - IN ULONGLONG SectorNumber, - IN ULONG SectorCount, - IN PVOID Buffer) -{ - ASSERT(gRamDiskBase == NULL); - return FALSE; -} - -ULONG -ArmDiskGetCacheableBlockCount(IN ULONG DriveNumber) -{ - ASSERT(gRamDiskBase == NULL); - return FALSE; -} - VOID ArmSetupPageDirectory(VOID) { @@ -182,123 +157,6 @@ ArmPrepareForReactOS(IN BOOLEAN Setup) // } -PCONFIGURATION_COMPONENT_DATA -ArmHwDetect(VOID) -{ - PCONFIGURATION_COMPONENT_DATA RootNode; - - // - // Create the root node - // - FldrCreateSystemKey(&RootNode); - - // - // Write null component information - // - FldrSetComponentInformation(RootNode, - 0x0, - 0x0, - 0xFFFFFFFF); - - // - // TODO: - // There's no such thing as "PnP" on embedded hardware. - // The boot loader will send us a device tree, similar to ACPI - // or OpenFirmware device trees, and we will convert it to ARC. - // - - // - // Return the root node - // - return RootNode; -} - -ULONG -ArmMemGetMemoryMap(OUT PBIOS_MEMORY_MAP BiosMemoryMap, - IN ULONG MaxMemoryMapSize) -{ - // - // Return whatever the board returned to us (CS0 Base + Size and FLASH0) - // - RtlCopyMemory(BiosMemoryMap, - ArmBoardBlock->MemoryMap, - ArmBoardBlock->MemoryMapEntryCount * sizeof(BIOS_MEMORY_MAP)); - return ArmBoardBlock->MemoryMapEntryCount; -} - -VOID -MachInit(IN PCCH CommandLine) -{ - // - // Setup board-specific ARM routines - // - switch (ArmBoardBlock->BoardType) - { - // - // Check for Feroceon-base boards - // - case MACH_TYPE_FEROCEON: - - // - // These boards use a UART16550. Set us up for 115200 bps - // - ArmFeroSerialInit(115200); - MachVtbl.ConsPutChar = ArmFeroPutChar; - MachVtbl.ConsKbHit = ArmFeroKbHit; - MachVtbl.ConsGetCh = ArmFeroGetCh; - break; - - // - // Check for ARM Versatile PB boards - // - case MACH_TYPE_VERSATILE_PB: - - // - // These boards use a PrimeCell UART (PL011) - // - ArmVersaSerialInit(115200); - MachVtbl.ConsPutChar = ArmVersaPutChar; - MachVtbl.ConsKbHit = ArmVersaKbHit; - MachVtbl.ConsGetCh = ArmVersaGetCh; - break; - - default: - ASSERT(FALSE); - } - - // - // Setup generic ARM routines for all boards - // - MachVtbl.PrepareForReactOS = ArmPrepareForReactOS; - MachVtbl.GetMemoryMap = ArmMemGetMemoryMap; - MachVtbl.HwDetect = ArmHwDetect; - - // - // Setup disk I/O routines, switch to ramdisk ones for non-NAND boot - // - MachVtbl.DiskReadLogicalSectors = ArmDiskReadLogicalSectors; - MachVtbl.DiskGetDriveGeometry = ArmDiskGetDriveGeometry; - MachVtbl.DiskGetCacheableBlockCount = ArmDiskGetCacheableBlockCount; - RamDiskSwitchFromBios(); - - // - // Now set default disk handling routines -- we don't need to override - // - MachVtbl.DiskGetBootVolume = DiskGetBootVolume; - MachVtbl.DiskGetSystemVolume = DiskGetSystemVolume; - MachVtbl.DiskGetBootPath = DiskGetBootPath; - MachVtbl.DiskGetBootDevice = DiskGetBootDevice; - MachVtbl.DiskBootingFromFloppy = DiskBootingFromFloppy; - MachVtbl.DiskNormalizeSystemPath = DiskNormalizeSystemPath; - MachVtbl.DiskGetPartitionEntry = DiskGetPartitionEntry; - - // - // We can now print to the console - // - TuiPrintf("%s for ARM\n", GetFreeLoaderVersionString()); - TuiPrintf("Bootargs: %s\n", CommandLine); -} - VOID FrLdrStartup(IN ULONG Magic) { diff --git a/reactos/boot/freeldr/freeldr/arch/arm/macharm.c b/reactos/boot/freeldr/freeldr/arch/arm/macharm.c index f214a292ec2..28d99662b89 100644 --- a/reactos/boot/freeldr/freeldr/arch/arm/macharm.c +++ b/reactos/boot/freeldr/freeldr/arch/arm/macharm.c @@ -14,6 +14,7 @@ PARM_BOARD_CONFIGURATION_BLOCK ArmBoardBlock; ULONG BootDrive, BootPartition; +VOID ArmPrepareForReactOS(IN BOOLEAN Setup); /* FUNCTIONS ******************************************************************/ @@ -43,3 +44,144 @@ ArmInit(IN PARM_BOARD_CONFIGURATION_BLOCK BootContext) BootMain(ArmBoardBlock->CommandLine); } +BOOLEAN +ArmDiskGetDriveGeometry(IN ULONG DriveNumber, + OUT PGEOMETRY Geometry) +{ + ASSERT(gRamDiskBase == NULL); + return FALSE; +} + +BOOLEAN +ArmDiskReadLogicalSectors(IN ULONG DriveNumber, + IN ULONGLONG SectorNumber, + IN ULONG SectorCount, + IN PVOID Buffer) +{ + ASSERT(gRamDiskBase == NULL); + return FALSE; +} + +ULONG +ArmDiskGetCacheableBlockCount(IN ULONG DriveNumber) +{ + ASSERT(gRamDiskBase == NULL); + return FALSE; +} + +PCONFIGURATION_COMPONENT_DATA +ArmHwDetect(VOID) +{ + PCONFIGURATION_COMPONENT_DATA RootNode; + + // + // Create the root node + // + FldrCreateSystemKey(&RootNode); + + // + // Write null component information + // + FldrSetComponentInformation(RootNode, + 0x0, + 0x0, + 0xFFFFFFFF); + + // + // TODO: + // There's no such thing as "PnP" on embedded hardware. + // The boot loader will send us a device tree, similar to ACPI + // or OpenFirmware device trees, and we will convert it to ARC. + // + + // + // Return the root node + // + return RootNode; +} + +ULONG +ArmMemGetMemoryMap(OUT PBIOS_MEMORY_MAP BiosMemoryMap, + IN ULONG MaxMemoryMapSize) +{ + // + // Return whatever the board returned to us (CS0 Base + Size and FLASH0) + // + RtlCopyMemory(BiosMemoryMap, + ArmBoardBlock->MemoryMap, + ArmBoardBlock->MemoryMapEntryCount * sizeof(BIOS_MEMORY_MAP)); + return ArmBoardBlock->MemoryMapEntryCount; +} + +VOID +MachInit(IN PCCH CommandLine) +{ + // + // Setup board-specific ARM routines + // + switch (ArmBoardBlock->BoardType) + { + // + // Check for Feroceon-base boards + // + case MACH_TYPE_FEROCEON: + + // + // These boards use a UART16550. Set us up for 115200 bps + // + ArmFeroSerialInit(115200); + MachVtbl.ConsPutChar = ArmFeroPutChar; + MachVtbl.ConsKbHit = ArmFeroKbHit; + MachVtbl.ConsGetCh = ArmFeroGetCh; + break; + + // + // Check for ARM Versatile PB boards + // + case MACH_TYPE_VERSATILE_PB: + + // + // These boards use a PrimeCell UART (PL011) + // + ArmVersaSerialInit(115200); + MachVtbl.ConsPutChar = ArmVersaPutChar; + MachVtbl.ConsKbHit = ArmVersaKbHit; + MachVtbl.ConsGetCh = ArmVersaGetCh; + break; + + default: + ASSERT(FALSE); + } + + // + // Setup generic ARM routines for all boards + // + MachVtbl.PrepareForReactOS = ArmPrepareForReactOS; + MachVtbl.GetMemoryMap = ArmMemGetMemoryMap; + MachVtbl.HwDetect = ArmHwDetect; + + // + // Setup disk I/O routines, switch to ramdisk ones for non-NAND boot + // + MachVtbl.DiskReadLogicalSectors = ArmDiskReadLogicalSectors; + MachVtbl.DiskGetDriveGeometry = ArmDiskGetDriveGeometry; + MachVtbl.DiskGetCacheableBlockCount = ArmDiskGetCacheableBlockCount; + RamDiskSwitchFromBios(); + + // + // Now set default disk handling routines -- we don't need to override + // + MachVtbl.DiskGetBootVolume = DiskGetBootVolume; + MachVtbl.DiskGetSystemVolume = DiskGetSystemVolume; + MachVtbl.DiskGetBootPath = DiskGetBootPath; + MachVtbl.DiskGetBootDevice = DiskGetBootDevice; + MachVtbl.DiskBootingFromFloppy = DiskBootingFromFloppy; + MachVtbl.DiskNormalizeSystemPath = DiskNormalizeSystemPath; + MachVtbl.DiskGetPartitionEntry = DiskGetPartitionEntry; + + // + // We can now print to the console + // + TuiPrintf("%s for ARM\n", GetFreeLoaderVersionString()); + TuiPrintf("Bootargs: %s\n", CommandLine); +} diff --git a/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild b/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild index 58355d532d8..3823cbf4e96 100644 --- a/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild +++ b/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild @@ -102,9 +102,9 @@ boot.s ferouart.c - versuart.c + loader.c macharm.c - stubs.c + versuart.c