From e7756d443d69137d61c43d2eb22c8a5b18f63067 Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Mon, 30 Jun 2008 02:42:12 +0000 Subject: [PATCH] - Add RAM disk support to FreeLDR and to the NTLDR emulation layer in the kernel for non-clean archs (ppc and x86) svn path=/trunk/; revision=34204 --- reactos/boot/freeldr/freeldr/reactos/reactos.c | 2 ++ reactos/include/reactos/rosldr.h | 2 ++ reactos/ntoskrnl/ke/freeldr.c | 15 +++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/reactos/boot/freeldr/freeldr/reactos/reactos.c index 0369e8d84c0..f66c73be570 100644 --- a/reactos/boot/freeldr/freeldr/reactos/reactos.c +++ b/reactos/boot/freeldr/freeldr/reactos/reactos.c @@ -601,6 +601,8 @@ LoadAndBootReactOS(PCSTR OperatingSystemName) LoaderBlock.ModsCount = 0; LoaderBlock.ModsAddr = reactos_modules; LoaderBlock.DrivesAddr = reactos_arc_disk_info; + LoaderBlock.RdAddr = (ULONG)gRamDiskBase; + LoaderBlock.RdLength = gRamDiskSize; LoaderBlock.MmapLength = (unsigned long)MachGetMemoryMap((PBIOS_MEMORY_MAP)reactos_memory_map, 32) * sizeof(memory_map_t); if (LoaderBlock.MmapLength) { diff --git a/reactos/include/reactos/rosldr.h b/reactos/include/reactos/rosldr.h index fc3eac54cf0..c7a76f810d0 100644 --- a/reactos/include/reactos/rosldr.h +++ b/reactos/include/reactos/rosldr.h @@ -35,6 +35,8 @@ typedef struct _ROS_LOADER_PARAMETER_BLOCK UCHAR Syms[12]; ULONG MmapLength; ULONG MmapAddr; + ULONG RdLength; + ULONG RdAddr; ULONG DrivesCount; PARC_DISK_SIGNATURE DrivesAddr; ULONG ConfigTable; diff --git a/reactos/ntoskrnl/ke/freeldr.c b/reactos/ntoskrnl/ke/freeldr.c index 1d9a0b31ba8..ce70a634c0c 100644 --- a/reactos/ntoskrnl/ke/freeldr.c +++ b/reactos/ntoskrnl/ke/freeldr.c @@ -1148,6 +1148,21 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock, KERNEL_DESCRIPTOR_PAGE(RosEntry->ModEnd), 0, &Base); + + // + // Check if we have a ramdisk + // + if ((RosLoaderBlock->RdAddr) && (RosLoaderBlock->RdLength)) + { + // + // Build a descriptor for it + // + KiRosAllocateNtDescriptor(LoaderXIPRom, + KERNEL_DESCRIPTOR_PAGE(RosLoaderBlock->RdAddr), + (RosLoaderBlock->RdLength + PAGE_SIZE - 1) >> PAGE_SHIFT, + 0, + &Base); + } /* Setup command line */ LoaderBlock->LoadOptions = BldrCommandLine;