diff --git a/boot/freeldr/freeldr/bootmgr.c b/boot/freeldr/freeldr/bootmgr.c index 4a1923dff19..9830c2ec74f 100644 --- a/boot/freeldr/freeldr/bootmgr.c +++ b/boot/freeldr/freeldr/bootmgr.c @@ -54,12 +54,13 @@ static const struct { {"ReactOSSetup", EditCustomBootReactOSSetup, LoadReactOSSetup}, -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) {"Drive" , EditCustomBootDisk , LoadAndBootDevice}, {"Partition" , EditCustomBootPartition , LoadAndBootDevice}, {"BootSector" , EditCustomBootSectorFile, LoadAndBootDevice}, - {"Linux" , EditCustomBootLinux, LoadAndBootLinux }, +#endif +#ifdef _M_IX86 {"WindowsNT40" , EditCustomBootNTOS , LoadAndBootWindows}, #endif {"Windows" , EditCustomBootNTOS , LoadAndBootWindows}, diff --git a/boot/freeldr/freeldr/custom.c b/boot/freeldr/freeldr/custom.c index 604d7ac9629..7cfd38c8d40 100644 --- a/boot/freeldr/freeldr/custom.c +++ b/boot/freeldr/freeldr/custom.c @@ -23,14 +23,14 @@ /* GLOBALS ********************************************************************/ -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) const CHAR BootSectorFilePrompt[] = "Enter the boot sector file path.\n\nExamples:\n\\BOOTSECT.DOS\n/boot/bootsect.dos"; const CHAR LinuxKernelPrompt[] = "Enter the Linux kernel image path.\n\nExamples:\n/vmlinuz\n/boot/vmlinuz-2.4.18"; const CHAR LinuxInitrdPrompt[] = "Enter the initrd image path.\n\nExamples:\n/initrd.gz\n/boot/root.img.gz\n\nLeave blank for no initial ram disk."; const CHAR LinuxCommandLinePrompt[] = "Enter the Linux kernel command line.\n\nExamples:\nroot=/dev/hda1\nroot=/dev/fd0 read-only\nroot=/dev/sdb1 init=/sbin/init"; -#endif // _M_IX86 +#endif /* _M_IX86 || _M_AMD64 */ const CHAR BootDrivePrompt[] = "Enter the boot drive.\n\nExamples:\nfd0 - first floppy drive\nhd0 - first hard drive\nhd1 - second hard drive\ncd0 - first CD-ROM drive.\n\nBIOS drive numbers may also be used:\n0 - first floppy drive\n0x80 - first hard drive\n0x81 - second hard drive"; const CHAR BootPartitionPrompt[] = "Enter the boot partition.\n\nEnter 0 for the active (bootable) partition."; @@ -46,7 +46,7 @@ const CHAR CustomBootPrompt[] = "Press ENTER to boot your custom boot setup."; VOID OptionMenuCustomBoot(VOID) { PCSTR CustomBootMenuList[] = { -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) "Disk", "Partition", "Boot Sector File", @@ -75,7 +75,7 @@ VOID OptionMenuCustomBoot(VOID) OperatingSystem.SectionId = 0; switch (SelectedMenuItem) { -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) case 0: // Disk EditCustomBootDisk(&OperatingSystem); break; @@ -101,7 +101,7 @@ VOID OptionMenuCustomBoot(VOID) case 1: // ReactOS Setup EditCustomBootReactOS(&OperatingSystem, TRUE); break; -#endif +#endif /* _M_IX86 || _M_AMD64 */ } /* And boot it */ @@ -114,7 +114,7 @@ VOID OptionMenuCustomBoot(VOID) #endif // HAS_OPTION_MENU_CUSTOM_BOOT -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) VOID EditCustomBootDisk( @@ -612,7 +612,7 @@ EditCustomBootLinux( OperatingSystem->LoadIdentifier = "Custom Linux Setup"; } -#endif // _M_IX86 +#endif /* _M_IX86 || _M_AMD64 */ VOID EditCustomBootReactOS( diff --git a/boot/freeldr/freeldr/include/custom.h b/boot/freeldr/freeldr/include/custom.h index 57164b84c8e..8fb4f7bdae3 100644 --- a/boot/freeldr/freeldr/include/custom.h +++ b/boot/freeldr/freeldr/include/custom.h @@ -27,7 +27,7 @@ VOID OptionMenuCustomBoot(VOID); #endif -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) VOID EditCustomBootDisk( @@ -45,7 +45,7 @@ VOID EditCustomBootLinux( IN OUT OperatingSystemItem* OperatingSystem); -#endif // _M_IX86 +#endif /* _M_IX86 || _M_AMD64 */ VOID EditCustomBootReactOS( diff --git a/boot/freeldr/freeldr/include/linux.h b/boot/freeldr/freeldr/include/linux.h index c51f70dab9f..6bb92d946c7 100644 --- a/boot/freeldr/freeldr/include/linux.h +++ b/boot/freeldr/freeldr/include/linux.h @@ -23,7 +23,7 @@ #ifndef __LINUX_H #define __LINUX_H -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) #define LINUX_LOADER_TYPE_LILO 0x01 #define LINUX_LOADER_TYPE_LOADLIN 0x11 @@ -142,6 +142,6 @@ LoadAndBootLinux( IN PCHAR Argv[], IN PCHAR Envp[]); -#endif // _M_IX86 +#endif /* _M_IX86 || _M_AMD64 */ #endif // defined __LINUX_H diff --git a/boot/freeldr/freeldr/include/miscboot.h b/boot/freeldr/freeldr/include/miscboot.h index 9ba1cb8448d..0f05fd1ce03 100644 --- a/boot/freeldr/freeldr/include/miscboot.h +++ b/boot/freeldr/freeldr/include/miscboot.h @@ -19,7 +19,7 @@ #pragma once -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) ARC_STATUS LoadAndBootDevice( @@ -27,4 +27,4 @@ LoadAndBootDevice( IN PCHAR Argv[], IN PCHAR Envp[]); -#endif // _M_IX86 +#endif /* _M_IX86 || _M_AMD64 */ diff --git a/boot/freeldr/freeldr/linuxboot.c b/boot/freeldr/freeldr/linuxboot.c index fa9ad60d442..fae1f8da6a2 100644 --- a/boot/freeldr/freeldr/linuxboot.c +++ b/boot/freeldr/freeldr/linuxboot.c @@ -22,9 +22,7 @@ * https://www.kernel.org/doc/Documentation/x86/boot.txt */ -#ifndef _M_ARM - -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) /* INCLUDES *******************************************************************/ @@ -439,7 +437,7 @@ static BOOLEAN LinuxReadKernel(ULONG LinuxKernelFile) Position.QuadPart = 512 + SetupSectorSize; if (ArcSeek(LinuxKernelFile, &Position, SeekAbsolute) != ESUCCESS) return FALSE; - for (BytesLoaded=0; BytesLoadedVersion <= 0x0202) { +#ifdef _M_AMD64 + C_ASSERT(LINUX_MAX_INITRD_ADDRESS < 0x100000000); +#endif LinuxInitrdLoadAddress = MmAllocateHighestMemoryBelowAddress(LinuxInitrdSize, (PVOID)LINUX_MAX_INITRD_ADDRESS, LoaderSystemCode); } else { - LinuxInitrdLoadAddress = MmAllocateHighestMemoryBelowAddress(LinuxInitrdSize, (PVOID)LinuxSetupSector->InitrdAddressMax, LoaderSystemCode); + LinuxInitrdLoadAddress = MmAllocateHighestMemoryBelowAddress(LinuxInitrdSize, UlongToPtr(LinuxSetupSector->InitrdAddressMax), LoaderSystemCode); } if (LinuxInitrdLoadAddress == NULL) { return FALSE; } +#ifdef _M_AMD64 + ASSERT((ULONG_PTR)LinuxInitrdLoadAddress < 0x100000000); +#endif /* Set the information in the setup struct */ - LinuxSetupSector->RamdiskAddress = (ULONG)LinuxInitrdLoadAddress; + LinuxSetupSector->RamdiskAddress = PtrToUlong(LinuxInitrdLoadAddress); LinuxSetupSector->RamdiskSize = LinuxInitrdSize; TRACE("RamdiskAddress: 0x%x\n", LinuxSetupSector->RamdiskAddress); @@ -528,9 +532,9 @@ static BOOLEAN LinuxReadInitrd(ULONG LinuxInitrdFile) } /* Load the ramdisk */ - for (BytesLoaded=0; BytesLoaded