Revert freeldr back to revision 14697
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/arch.S
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/archmach.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/boot.S
Deleted: trunk/reactos/boot/freeldr/freeldr/arch/i386/i386.h
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/i386disk.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/linux.S
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.h
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.h
Modified: trunk/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c
Modified: trunk/reactos/boot/freeldr/freeldr/bootmgr.c
Modified: trunk/reactos/boot/freeldr/freeldr/disk/partition.c
Modified: trunk/reactos/boot/freeldr/freeldr/freeldr.c
Modified: trunk/reactos/boot/freeldr/freeldr/fs/fs.c
Added: trunk/reactos/boot/freeldr/freeldr/fs/fsrec.h
Modified: trunk/reactos/boot/freeldr/freeldr/include/freeldr.h
Modified: trunk/reactos/boot/freeldr/freeldr/include/fs.h
Deleted: trunk/reactos/boot/freeldr/freeldr/include/fsrec.h
Modified: trunk/reactos/boot/freeldr/freeldr/include/machine.h
Modified: trunk/reactos/boot/freeldr/freeldr/inifile/ini.h
Modified: trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c
Modified: trunk/reactos/boot/freeldr/freeldr/linuxboot.c
Modified: trunk/reactos/boot/freeldr/freeldr/machine.c
Modified: trunk/reactos/boot/freeldr/freeldr/miscboot.c
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/arcname.c
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/reactos.c
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/setupldr.c

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/arch.S
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/arch.S	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/arch.S	2005-04-23 10:15:49 UTC (rev 14765)
@@ -47,10 +47,10 @@
 	.code32
 
 	/* Store the boot drive */
-	movb	%dl,(_i386BootDrive)
+	movb	%dl,(_BootDrive)
 
 	/* Store the boot partition */
-	movb	%dh,(_i386BootPartition)
+	movb	%dh,(_BootPartition)
 
 	/* GO! */
 	xorl	%eax,%eax
@@ -275,11 +275,9 @@
  * other boot loaders like Grub
  */
 
-#define MB_INFO_SIZE                90
 #define MB_INFO_FLAGS_OFFSET        0
 #define MB_INFO_BOOT_DEVICE_OFFSET  12
 #define MB_INFO_COMMAND_LINE_OFFSET 16
-#define CMDLINE_SIZE                256
 
 /*
  * We want to execute at 0x8000 (to be compatible with bootsector
@@ -287,6 +285,7 @@
  * above 1MB. So we let Grub load us there and then relocate
  * ourself to 0x8000
  */
+#define CMDLINE_BASE 0x7000
 #define FREELDR_BASE 0x8000
 #define INITIAL_BASE 0x200000
 
@@ -329,31 +328,6 @@
 	movw	%dx,%ds
 	movw	%dx,%es
 
-	/* Check for valid multiboot signature */
-	cmpl	$MULTIBOOT_BOOTLOADER_MAGIC,%eax
-	jne	mbfail
-
-	/* Store multiboot info in a safe place */
-	movl	%ebx,%esi
-	movl	$(mb_info + INITIAL_BASE - FREELDR_BASE),%edi
-	movl	$MB_INFO_SIZE,%ecx
-	rep movsb
-
-	/* Save commandline */
-	movl	MB_INFO_FLAGS_OFFSET(%ebx),%edx
-	testl	$MB_INFO_FLAG_COMMAND_LINE,MB_INFO_FLAGS_OFFSET(%ebx)
-	jz	mb3
-	movl	MB_INFO_COMMAND_LINE_OFFSET(%ebx),%esi
-	movl	$(cmdline + INITIAL_BASE - FREELDR_BASE),%edi
-	movl	$CMDLINE_SIZE,%ecx
-mb2:	lodsb
-	stosb
-	testb	%al,%al
-	jz	mb3
-	dec	%ecx
-	jnz	mb2
-mb3:
-
 	/* Copy to low mem */
 	movl	$INITIAL_BASE,%esi
 	movl	$FREELDR_BASE,%edi
@@ -368,8 +342,8 @@
 
 	/* Clear prefetch queue & correct CS,
 	 * jump to low mem */
-	ljmp	$PMODE_CS, $mb4
-mb4:
+	ljmp	$PMODE_CS, $mb2
+mb2:
 	/* Reload segment selectors */
 	movw	$PMODE_DS,%dx
 	movw	%dx,%ds
@@ -379,28 +353,39 @@
 	movw	%dx,%ss
 	movl	$STACK32ADDR,%esp
 
-	movl	$mb_info,%ebx
+	/* Check for valid multiboot signature */
+	cmpl	$MULTIBOOT_BOOTLOADER_MAGIC,%eax
+	jne	mbfail
+
 	/* See if the boot device was passed in */
 	movl	MB_INFO_FLAGS_OFFSET(%ebx),%edx
 	testl	$MB_INFO_FLAG_BOOT_DEVICE,%edx
-	jz	mb5
+	jz	mb3
 	/* Retrieve boot device info */
 	movl	MB_INFO_BOOT_DEVICE_OFFSET(%ebx),%eax
 	shrl	$16,%eax
 	incb	%al
-	movb	%al,_i386BootPartition
-	movb	%ah,_i386BootDrive
-	jmp	mb6
-mb5:	/* No boot device known, assume first partition of first harddisk */
-	movb	$0x80,_i386BootDrive
-	movb	$1,_i386BootPartition
-mb6:
-	/* Check for command line */
-	mov	$cmdline,%eax
-	testl	$MB_INFO_FLAG_COMMAND_LINE,MB_INFO_FLAGS_OFFSET(%ebx)
-	jnz	mb7
+	movb	%al,_BootPartition
+	movb	%ah,_BootDrive
+	jmp	mb4
+mb3:	/* No boot device known, assume first partition of first harddisk */
+	movb	$0x80,_BootDrive
+	movb	$1,_BootPartition
+mb4:
+
+	/* Check for a command line */
 	xorl	%eax,%eax
-mb7:
+	testl	$MB_INFO_FLAG_COMMAND_LINE,%edx
+	jz	mb6
+	/* Copy command line to low mem*/
+	movl	MB_INFO_COMMAND_LINE_OFFSET(%ebx),%esi
+	movl	$CMDLINE_BASE,%edi
+mb5:	lodsb
+	stosb
+	testb	%al,%al
+	jnz	mb5
+	movl	$CMDLINE_BASE,%eax
+mb6:
 
 	/* GO! */
 	pushl	%eax	
@@ -477,15 +462,8 @@
 	.word	0x3ff		/* Limit */
 	.long	0			/* Base Address */
 
-EXTERN(_i386BootDrive)
+EXTERN(_BootDrive)
 	.long	0
 
-EXTERN(_i386BootPartition)
+EXTERN(_BootPartition)
 	.long	0
-
-.bss
-mb_info:
-	.fill	MB_INFO_SIZE, 1, 0
-
-cmdline:
-	.fill	CMDLINE_SIZE, 1, 0

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/archmach.c
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/archmach.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/archmach.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -27,7 +27,7 @@
 #include "rtl.h"
 
 VOID
-MachInit(char *CmdLine)
+MachInit(VOID)
 {
   ULONG PciId;
 
@@ -39,11 +39,11 @@
   PciId = READ_PORT_ULONG((ULONG*) 0xcfc);
   if (0x02a510de == PciId)
     {
-      XboxMachInit(CmdLine);
+      XboxMachInit();
     }
   else
     {
-      PcMachInit(CmdLine);
+      PcMachInit();
     }
 
   HalpCalibrateStallExecution();

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/boot.S
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/boot.S	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/boot.S	2005-04-23 10:15:49 UTC (rev 14765)
@@ -31,7 +31,7 @@
 	.code16
 
 	/* Set the boot drive */
-	movb	(_i386BootDrive),%dl
+	movb	(_BootDrive),%dl
 
 	/* Load segment registers */
 	cli

Deleted: trunk/reactos/boot/freeldr/freeldr/arch/i386/i386.h
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/i386.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/i386.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -1,40 +0,0 @@
-/*
- *  FreeLoader
- *
- *  Copyright (C) 2003  Eric Kohl
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef __I386_I386_H_
-#define __I386_I386_H_
-
-
-extern ULONG i386BootDrive;
-extern ULONG i386BootPartition;
-
-extern BOOL i386DiskGetBootVolume(PULONG DriveNumber, PULONGLONG StartSector,
-                                  PULONGLONG SectorCount, int *FsType);
-extern BOOL i386DiskGetSystemVolume(char *SystemPath, char *RemainingPath,
-                                    PULONG Device, PULONG DriveNumber,
-                                    PULONGLONG StartSector,
-                                    PULONGLONG SectorCount, int *FsType);
-extern BOOL i386DiskGetBootPath(char *BootPath, unsigned Size);
-extern VOID i386DiskGetBootDevice(PULONG BootDevice);
-extern BOOL i386DiskBootingFromFloppy(VOID);
-
-#endif /* __I386_I386_H_ */
-
-/* EOF */

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/i386disk.c
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/i386disk.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/i386disk.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -19,8 +19,6 @@
 
 #include "freeldr.h"
 #include "debug.h"
-#include "i386.h"
-#include "fsrec.h"
 
 /////////////////////////////////////////////////////////////////////////////////////////////
 // FUNCTIONS
@@ -168,244 +166,4 @@
 	return TRUE;
 }
 
-BOOL i386DiskGetBootVolume(PULONG DriveNumber, PULONGLONG StartSector, PULONGLONG SectorCount, int *FsType) 
-{
-	PARTITION_TABLE_ENTRY	PartitionTableEntry;
-	UCHAR			VolumeType;
-
-	DbgPrint((DPRINT_FILESYSTEM, "FsOpenVolume() DriveNumber: 0x%x PartitionNumber: 0x%x\n", i386BootDrive, i386BootPartition));
-
-	// Check and see if it is a floppy drive
-	// If so then just assume FAT12 file system type
-	if (DiskIsDriveRemovable(i386BootDrive))
-	{
-		DbgPrint((DPRINT_FILESYSTEM, "Drive is a floppy diskette drive. Assuming FAT12 file system.\n"));
-
-		*DriveNumber = i386BootDrive;
-		*StartSector = 0;
-		*SectorCount = 2 * 80 * 18; /* FIXME hardcoded for 1.44 Mb */
-		*FsType = FS_FAT;
-		return TRUE;
-	}
-
-	// Check for ISO9660 file system type
-	if (i386BootDrive >= 0x80 && FsRecIsIso9660(i386BootDrive))
-	{
-		DbgPrint((DPRINT_FILESYSTEM, "Drive is a cdrom drive. Assuming ISO-9660 file system.\n"));
-
-		*DriveNumber = i386BootDrive;
-		*StartSector = 0;
-		*SectorCount = 0;
-		*FsType = FS_ISO9660;
-		return TRUE;
-	}
-
-	// Get the requested partition entry
-	if (i386BootPartition == 0)
-	{
-		// Partition requested was zero which means the boot partition
-		if (! DiskGetActivePartitionEntry(i386BootDrive, &PartitionTableEntry))
-		{
-			return FALSE;
-		}
-	}
-	else
-	{
-		// Get requested partition
-		if (! MachDiskGetPartitionEntry(i386BootDrive, i386BootPartition, &PartitionTableEntry))
-		{
-			return FALSE;
-		}
-	}
-
-	// Check for valid partition
-	if (PartitionTableEntry.SystemIndicator == PARTITION_ENTRY_UNUSED)
-	{
-		return FALSE;
-	}
-
-	// Try to recognize the file system
-	if (!FsRecognizeVolume(i386BootDrive, PartitionTableEntry.SectorCountBeforePartition, &VolumeType))
-	{
-		return FALSE;
-	}
-
-	*DriveNumber = i386BootDrive;
-	*StartSector = PartitionTableEntry.SectorCountBeforePartition;
-	*SectorCount = PartitionTableEntry.PartitionSectorCount;
-
-	//switch (PartitionTableEntry.SystemIndicator)
-	switch (VolumeType)
-	{
-	case PARTITION_FAT_12:
-	case PARTITION_FAT_16:
-	case PARTITION_HUGE:
-	case PARTITION_XINT13:
-	case PARTITION_FAT32:
-	case PARTITION_FAT32_XINT13:
-		*FsType = FS_FAT;
-		return TRUE;
-	case PARTITION_EXT2:
-		*FsType = FS_EXT2;
-		return TRUE;
-	case PARTITION_NTFS:
-		*FsType = FS_NTFS;
-		return TRUE;
-	default:
-		*FsType = 0;
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-VOID
-i386DiskGetBootDevice(PULONG BootDevice)
-{
-  ((char *)BootDevice)[0] = (char)i386BootDrive;
-  ((char *)BootDevice)[1] = (char)i386BootPartition;
-}
-
-BOOL
-i386DiskBootingFromFloppy(VOID)
-{
-  return i386BootDrive < 0x80;
-}
-
-#define IsRecognizedPartition(P)  \
-    ((P) == PARTITION_FAT_12       || \
-     (P) == PARTITION_FAT_16       || \
-     (P) == PARTITION_HUGE         || \
-     (P) == PARTITION_IFS          || \
-     (P) == PARTITION_EXT2         || \
-     (P) == PARTITION_FAT32        || \
-     (P) == PARTITION_FAT32_XINT13 || \
-     (P) == PARTITION_XINT13)
-
-BOOL i386DiskGetSystemVolume(char *SystemPath,
-                             char *RemainingPath,
-                             PULONG Device,
-                             PULONG DriveNumber,
-                             PULONGLONG StartSector,
-                             PULONGLONG SectorCount,
-                             int *FsType)
-{
-	ULONG PartitionNumber;
-	PARTITION_TABLE_ENTRY PartitionTableEntry;
-	UCHAR VolumeType;
-	CHAR BootPath[256];
-	unsigned i, RosPartition;
-
-	/*
-	 * Verify system path
-	 */
-	if (!DissectArcPath(SystemPath, BootPath, DriveNumber, &PartitionNumber))
-	{
-		return FALSE;
-	}
-	if (NULL != RemainingPath)
-	{
-		strcpy(RemainingPath, BootPath);
-	}
-
-	/* 0xff -> no partition table present, use whole device */
-	if (0xff == PartitionNumber)
-	{
-		PartitionTableEntry.SectorCountBeforePartition = 0;
-		i = 0xff;
-	}
-	else
-	{
-		/* recalculate the boot partition for freeldr */
-		i = 0;
-		RosPartition = 0;
-		while (1)
-		{
-			if (!MachDiskGetPartitionEntry(*DriveNumber, ++i, &PartitionTableEntry))
-			{
-				return FALSE;
-			}
-			if (IsRecognizedPartition(PartitionTableEntry.SystemIndicator))
-			{
-				if (++RosPartition == PartitionNumber)
-				{
-					break;
-				}
-			}
-		}
-	}
-
-	/* Check for ISO9660 file system type */
-	if (*DriveNumber >= 0x80 && FsRecIsIso9660(*DriveNumber))
-	{
-		DbgPrint((DPRINT_FILESYSTEM, "Drive is a cdrom drive. Assuming ISO-9660 file system.\n"));
-
-		if (NULL != Device)
-		{
-			((char *)Device)[0] = (char)(*DriveNumber);
-			((char *)Device)[1] = (char)i;
-		}
-		*StartSector = 0;
-		*SectorCount = 0;
-		*FsType = FS_ISO9660;
-		return TRUE;
-	}
-
-	if (!FsRecognizeVolume(*DriveNumber, PartitionTableEntry.SectorCountBeforePartition, &VolumeType))
-	{
-		return FALSE;
-	}
-
-	if (NULL != Device)
-	{
-		((char *)Device)[0] = (char)(*DriveNumber);
-		((char *)Device)[1] = (char)i;
-	}
-	*StartSector = PartitionTableEntry.SectorCountBeforePartition;
-	*SectorCount = PartitionTableEntry.PartitionSectorCount;
-
-	switch (VolumeType)
-	{
-	case PARTITION_FAT_12:
-	case PARTITION_FAT_16:
-	case PARTITION_HUGE:
-	case PARTITION_XINT13:
-	case PARTITION_FAT32:
-	case PARTITION_FAT32_XINT13:
-		*FsType = FS_FAT;
-		return TRUE;
-	case PARTITION_EXT2:
-		*FsType = FS_EXT2;
-		return TRUE;
-	case PARTITION_NTFS:
-		*FsType = FS_NTFS;
-		return TRUE;
-	default:
-		*FsType = 0;
-		return FALSE;
-	}
-
-	return FALSE;
-}
-
-BOOL
-i386DiskGetBootPath(char *BootPath, unsigned Size)
-{
-	static char Path[] = "multi(0)disk(0)";
-	char Device[4];
-
-	itoa(i386BootDrive, Device, 10);
-	if (Size <= sizeof(Path) + 6 + strlen(Device))
-	{
-		return FALSE;
-	}
-	strcpy(BootPath, Path);
-	strcat(BootPath, MachDiskBootingFromFloppy() ? "fdisk" : "cdrom");
-	strcat(strcat(strcat(BootPath, "("), Device), ")");
-
-	return TRUE;
-}
-
-#endif /* defined __i386__ */
-
-/* EOF */
+#endif // defined __i386__

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/linux.S
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/linux.S	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/linux.S	2005-04-23 10:15:49 UTC (rev 14765)
@@ -30,7 +30,7 @@
 	.code16
 
 	/* Set the boot drive */
-	movb	(_i386BootDrive),%dl
+	movb	(_BootDrive),%dl
 
 	/* Load segment registers */
 	cli
@@ -66,7 +66,7 @@
 	.code16
 
 	/* Set the boot drive */
-	movb	(_i386BootDrive),%dl
+	movb	(_BootDrive),%dl
 
 	/* Load segment registers */
 	cli

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -23,10 +23,9 @@
 #include "machine.h"
 #include "machpc.h"
 #include "rtl.h"
-#include "i386.h"
 
 VOID
-PcMachInit(char *CmdLine)
+PcMachInit(VOID)
 {
   EnableA20();
 
@@ -49,11 +48,6 @@
   MachVtbl.VideoSync = PcVideoSync;
   MachVtbl.VideoPrepareForReactOS = PcVideoPrepareForReactOS;
   MachVtbl.GetMemoryMap = PcMemGetMemoryMap;
-  MachVtbl.DiskGetBootVolume = i386DiskGetBootVolume;
-  MachVtbl.DiskGetSystemVolume = i386DiskGetSystemVolume;
-  MachVtbl.DiskGetBootPath = i386DiskGetBootPath;
-  MachVtbl.DiskGetBootDevice = i386DiskGetBootDevice;
-  MachVtbl.DiskBootingFromFloppy = i386DiskBootingFromFloppy;
   MachVtbl.DiskReadLogicalSectors = PcDiskReadLogicalSectors;
   MachVtbl.DiskGetPartitionEntry = PcDiskGetPartitionEntry;
   MachVtbl.DiskGetDriveGeometry = PcDiskGetDriveGeometry;

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.h
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/machpc.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -26,7 +26,7 @@
 #include "mm.h"
 #endif
 
-VOID PcMachInit(char *CmdLine);
+VOID PcMachInit(VOID);
 
 VOID PcConsPutChar(int Ch);
 BOOL PcConsKbHit();

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.c
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -21,10 +21,9 @@
 #include "mm.h"
 #include "machine.h"
 #include "machxbox.h"
-#include "i386.h"
 
 VOID
-XboxMachInit(char *CmdLine)
+XboxMachInit(VOID)
 {
   /* Initialize our stuff */
   XboxMemInit();
@@ -47,11 +46,6 @@
   MachVtbl.VideoSync = XboxVideoSync;
   MachVtbl.VideoPrepareForReactOS = XboxVideoPrepareForReactOS;
   MachVtbl.GetMemoryMap = XboxMemGetMemoryMap;
-  MachVtbl.DiskGetBootVolume = i386DiskGetBootVolume;
-  MachVtbl.DiskGetSystemVolume = i386DiskGetSystemVolume;
-  MachVtbl.DiskGetBootPath = i386DiskGetBootPath;
-  MachVtbl.DiskGetBootDevice = i386DiskGetBootDevice;
-  MachVtbl.DiskBootingFromFloppy = i386DiskBootingFromFloppy;
   MachVtbl.DiskReadLogicalSectors = XboxDiskReadLogicalSectors;
   MachVtbl.DiskGetPartitionEntry = XboxDiskGetPartitionEntry;
   MachVtbl.DiskGetDriveGeometry = XboxDiskGetDriveGeometry;

Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.h
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/machxbox.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -26,7 +26,7 @@
 
 UCHAR XboxFont8x16[256 * 16];
 
-VOID XboxMachInit(char *CmdLine);
+VOID XboxMachInit(VOID);
 
 VOID XboxConsPutChar(int Ch);
 BOOL XboxConsKbHit();

Modified: trunk/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c
--- trunk/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/arch/powerpc/mach.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -279,7 +279,7 @@
     BootMain("freeldr-ppc");    
 }
 
-void MachInit(char *CmdLine) {
+void MachInit() {
     int len;
     printf( "Determining boot device:\n" );
     len = ofw_getprop(chosen_package, "bootpath", 

Modified: trunk/reactos/boot/freeldr/freeldr/bootmgr.c
--- trunk/reactos/boot/freeldr/freeldr/bootmgr.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/bootmgr.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -49,13 +49,6 @@
 	LONG		TimeOut;
 	ULONG		SelectedOperatingSystem;
 
-	if (!FsOpenBootVolume())
-	{
-		printf("Error opening boot partition for file access.\n");
-		MachConsGetCh();
-		return;
-	}
-
 	if (!IniFileInitialize())
 	{
 		printf("Press any key to reboot.\n");

Modified: trunk/reactos/boot/freeldr/freeldr/disk/partition.c
--- trunk/reactos/boot/freeldr/freeldr/disk/partition.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/disk/partition.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -28,8 +28,7 @@
 
 BOOL DiskGetActivePartitionEntry(ULONG DriveNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry)
 {
-	ULONG			BootablePartitionCount = 0;
-	ULONG			ActivePartition = 0;
+	ULONG					BootablePartitionCount = 0;
 	MASTER_BOOT_RECORD	MasterBootRecord;
 
 	// Read master boot record
@@ -42,22 +41,22 @@
 	if (MasterBootRecord.PartitionTable[0].BootIndicator == 0x80)
 	{
 		BootablePartitionCount++;
-		ActivePartition = 0;
+		BootPartition = 0;
 	}
 	if (MasterBootRecord.PartitionTable[1].BootIndicator == 0x80)
 	{
 		BootablePartitionCount++;
-		ActivePartition = 1;
+		BootPartition = 1;
 	}
 	if (MasterBootRecord.PartitionTable[2].BootIndicator == 0x80)
 	{
 		BootablePartitionCount++;
-		ActivePartition = 2;
+		BootPartition = 2;
 	}
 	if (MasterBootRecord.PartitionTable[3].BootIndicator == 0x80)
 	{
 		BootablePartitionCount++;
-		ActivePartition = 3;
+		BootPartition = 3;
 	}
 
 	// Make sure there was only one bootable partition
@@ -73,7 +72,7 @@
 	}
 
 	// Copy the partition table entry
-	RtlCopyMemory(PartitionTableEntry, &MasterBootRecord.PartitionTable[ActivePartition], sizeof(PARTITION_TABLE_ENTRY));
+	RtlCopyMemory(PartitionTableEntry, &MasterBootRecord.PartitionTable[BootPartition], sizeof(PARTITION_TABLE_ENTRY));
 
 	return TRUE;
 }

Modified: trunk/reactos/boot/freeldr/freeldr/freeldr.c
--- trunk/reactos/boot/freeldr/freeldr/freeldr.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/freeldr.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -31,7 +31,7 @@
 {
 	CmdLineParse(CmdLine);
 
-	MachInit(CmdLine);
+	MachInit();
 
 	DebugInit();
 

Modified: trunk/reactos/boot/freeldr/freeldr/fs/fs.c
--- trunk/reactos/boot/freeldr/freeldr/fs/fs.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/fs/fs.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -51,78 +51,110 @@
 
 /*
  *
- * BOOL FsOpenVolume(ULONG DriveNumber, ULONGLONG StartSector, ULONGLONG SectorCount, int Type);
+ * BOOL FsOpenVolume(ULONG DriveNumber, ULONG PartitionNumber);
  *
  * This function is called to open a disk volume for file access.
  * It must be called before any of the file functions will work.
+ * It takes two parameters:
  *
+ * Drive: The BIOS drive number of the disk to open
+ * Partition: This is zero for floppy drives.
+ *            If the disk is a hard disk then this specifies
+ *            The partition number to open (1 - 4)
+ *            If it is zero then it opens the active (bootable) partition
+ *
  */
-static BOOL FsOpenVolume(ULONG DriveNumber, ULONGLONG StartSector, ULONGLONG SectorCount, int Type)
+BOOL FsOpenVolume(ULONG DriveNumber, ULONG PartitionNumber)
 {
-	UCHAR ErrorText[80];
+	PARTITION_TABLE_ENTRY	PartitionTableEntry;
+	UCHAR					ErrorText[80];
+	UCHAR						VolumeType;
 
-	FsType = Type;
+	DbgPrint((DPRINT_FILESYSTEM, "FsOpenVolume() DriveNumber: 0x%x PartitionNumber: 0x%x\n", DriveNumber, PartitionNumber));
 
-	switch (FsType)
+	// Check and see if it is a floppy drive
+	// If so then just assume FAT12 file system type
+	if (DiskIsDriveRemovable(DriveNumber))
 	{
-	case FS_FAT:
-		return FatOpenVolume(DriveNumber, StartSector, SectorCount);
-	case FS_EXT2:
-		return Ext2OpenVolume(DriveNumber, StartSector);
-	case FS_NTFS:
-		return NtfsOpenVolume(DriveNumber, StartSector);
-	case FS_ISO9660:
+		DbgPrint((DPRINT_FILESYSTEM, "Drive is a floppy diskette drive. Assuming FAT12 file system.\n"));
+
+		FsType = FS_FAT;
+		return FatOpenVolume(DriveNumber, 0, 0);
+	}
+
+	// Check for ISO9660 file system type
+	if (DriveNumber >= 0x80 && FsRecIsIso9660(DriveNumber))
+	{
+		DbgPrint((DPRINT_FILESYSTEM, "Drive is a cdrom drive. Assuming ISO-9660 file system.\n"));
+
+		FsType = FS_ISO9660;
 		return IsoOpenVolume(DriveNumber);
-	default:
-		FsType = 0;
-		sprintf(ErrorText, "Unsupported file system. Type: 0x%x", Type);
-		FileSystemError(ErrorText);
 	}
 
-	return FALSE;
-}
-/*
- *
- * BOOL FsOpenBootVolume()
- *
- * This function is called to open the boot disk volume for file access.
- * It must be called before any of the file functions will work.
- */
-BOOL FsOpenBootVolume()
-{
-	ULONG DriveNumber;
-	ULONGLONG StartSector;
-	ULONGLONG SectorCount;
-	int Type;
+	// Set the boot partition
+	BootPartition = PartitionNumber;
 
-	if (! MachDiskGetBootVolume(&DriveNumber, &StartSector, &SectorCount, &Type))
+	// Get the requested partition entry
+	if (PartitionNumber == 0)
 	{
-		FileSystemError("Unable to locate boot partition\n");
+		// Partition requested was zero which means the boot partition
+		if (DiskGetActivePartitionEntry(DriveNumber, &PartitionTableEntry) == FALSE)
+		{
+			FileSystemError("No active partition.");
+			return FALSE;
+		}
+	}
+	else
+	{
+		// Get requested partition
+		if (MachDiskGetPartitionEntry(DriveNumber, PartitionNumber, &PartitionTableEntry) == FALSE)
+		{
+			FileSystemError("Partition not found.");
+			return FALSE;
+		}
+	}
+
+	// Check for valid partition
+	if (PartitionTableEntry.SystemIndicator == PARTITION_ENTRY_UNUSED)
+	{
+		FileSystemError("Invalid partition.");
 		return FALSE;
 	}
 
-	return FsOpenVolume(DriveNumber, StartSector, SectorCount, Type);
-}
+	// Try to recognize the file system
+	if (!FsRecognizeVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition, &VolumeType))
+	{
+		FileSystemError("Unrecognized file system.");
+		return FALSE;
+	}
 
-BOOL FsOpenSystemVolume(char *SystemPath, char *RemainingPath, PULONG Device)
-{
-	ULONG DriveNumber;
-	ULONGLONG StartSector;
-	ULONGLONG SectorCount;
-	int Type;
-
-	if (! MachDiskGetSystemVolume(SystemPath, RemainingPath, Device,
-	                              &DriveNumber, &StartSector, &SectorCount,
-	                              &Type))
+	//switch (PartitionTableEntry.SystemIndicator)
+	switch (VolumeType)
 	{
-		FileSystemError("Unable to locate system partition\n");
+	case PARTITION_FAT_12:
+	case PARTITION_FAT_16:
+	case PARTITION_HUGE:
+	case PARTITION_XINT13:
+	case PARTITION_FAT32:
+	case PARTITION_FAT32_XINT13:
+		FsType = FS_FAT;
+		return FatOpenVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition, PartitionTableEntry.PartitionSectorCount);
+	case PARTITION_EXT2:
+		FsType = FS_EXT2;
+		return Ext2OpenVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition);
+	case PARTITION_NTFS:
+		FsType = FS_NTFS;
+		return NtfsOpenVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition);
+	default:
+		FsType = 0;
+		sprintf(ErrorText, "Unsupported file system. Type: 0x%x", VolumeType);
+		FileSystemError(ErrorText);
 		return FALSE;
 	}
 
-	return FsOpenVolume(DriveNumber, StartSector, SectorCount, Type);
+	return TRUE;
 }
 
-
 PFILE FsOpenFile(PUCHAR FileName)
 {
 	PFILE	FileHandle = NULL;

Copied: trunk/reactos/boot/freeldr/freeldr/fs/fsrec.h (from rev 14697, trunk/reactos/boot/freeldr/freeldr/fs/fsrec.h)
Property changes on: trunk/reactos/boot/freeldr/freeldr/fs/fsrec.h ___________________________________________________________________ Name: svn:keywords   + author date id revision Name: svn:eol-style   + native
Modified: trunk/reactos/boot/freeldr/freeldr/include/freeldr.h
--- trunk/reactos/boot/freeldr/freeldr/include/freeldr.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/include/freeldr.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -38,6 +38,8 @@
 #define ROUND_DOWN(N, S) ((N) & ~((S) - 1))
 #define Ke386EraseFlags(x)     __asm__ __volatile__("pushl $0 ; popfl\n")
                                            
+extern ULONG BootDrive; /* BIOS boot drive, 0-A:, 1-B:, 0x80-C:, 0x81-D:, etc. */
+extern ULONG BootPartition; /* Boot Partition, 1-4 */
 extern BOOL UserInterfaceUp;	/* Tells us if the user interface is displayed */
 
 VOID BootMain(LPSTR CmdLine);

Modified: trunk/reactos/boot/freeldr/freeldr/include/fs.h
--- trunk/reactos/boot/freeldr/freeldr/include/fs.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/include/fs.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -33,8 +33,7 @@
 #define PFILE			FILE *
 
 VOID	FileSystemError(PUCHAR ErrorString);
-BOOL	FsOpenBootVolume();
-BOOL	FsOpenSystemVolume(char *SystemPath, char *RemainingPath, PULONG BootDevice);
+BOOL	FsOpenVolume(ULONG DriveNumber, ULONG PartitionNumber);
 PFILE	FsOpenFile(PUCHAR FileName);
 VOID	FsCloseFile(PFILE FileHandle);
 BOOL	FsReadFile(PFILE FileHandle, ULONG BytesToRead, ULONG* BytesRead, PVOID Buffer);

Deleted: trunk/reactos/boot/freeldr/freeldr/include/fsrec.h
--- trunk/reactos/boot/freeldr/freeldr/include/fsrec.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/include/fsrec.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -1,29 +0,0 @@
-/*
- *  FreeLoader
- *  Copyright (C) 1998-2003  Brian Palmer  <brianp@sginet.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifndef __FSREC_H
-#define __FSREC_H
-
-BOOL	FsRecognizeVolume(ULONG DriveNumber, ULONG VolumeStartSector, UCHAR* VolumeType);
-BOOL	FsRecIsIso9660(ULONG DriveNumber);
-BOOL	FsRecIsExt2(ULONG DriveNumber, ULONG VolumeStartSector);
-BOOL	FsRecIsFat(ULONG DriveNumber, ULONG VolumeStartSector);
-BOOL	FsRecIsNtfs(ULONG DriveNumber, ULONG VolumeStartSector);
-
-#endif // #defined __FSREC_H

Modified: trunk/reactos/boot/freeldr/freeldr/include/machine.h
--- trunk/reactos/boot/freeldr/freeldr/include/machine.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/include/machine.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -56,11 +56,6 @@
 
   ULONG (*GetMemoryMap)(PBIOS_MEMORY_MAP BiosMemoryMap, ULONG MaxMemoryMapSize);
 
-  BOOL (*DiskGetBootVolume)(PULONG DriveNumber, PULONGLONG StartSector, PULONGLONG SectorCount, int *FsType);
-  BOOL (*DiskGetSystemVolume)(char *SystemPath, char *RemainingPath, PULONG Device, PULONG DriveNumber, PULONGLONG StartSector, PULONGLONG SectorCount, int *FsType);
-  BOOL (*DiskGetBootPath)(char *BootPath, unsigned Size);
-  VOID (*DiskGetBootDevice)(PULONG BootDevice);
-  BOOL (*DiskBootingFromFloppy)(VOID);
   BOOL (*DiskReadLogicalSectors)(ULONG DriveNumber, ULONGLONG SectorNumber, ULONG SectorCount, PVOID Buffer);
   BOOL (*DiskGetPartitionEntry)(ULONG DriveNumber, ULONG PartitionNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry);
   BOOL (*DiskGetDriveGeometry)(ULONG DriveNumber, PGEOMETRY DriveGeometry);
@@ -71,7 +66,7 @@
   VOID (*HwDetect)(VOID);
 } MACHVTBL, *PMACHVTBL;
 
-VOID MachInit(char *CmdLine);
+VOID MachInit(VOID);
 
 extern MACHVTBL MachVtbl;
 
@@ -92,11 +87,6 @@
 #define MachVideoSync()				MachVtbl.VideoSync()
 #define MachVideoPrepareForReactOS()		MachVtbl.VideoPrepareForReactOS()
 #define MachGetMemoryMap(MMap, Size)		MachVtbl.GetMemoryMap((MMap), (Size))
-#define MachDiskGetBootVolume(Drv, Start, Cnt, FsType)	MachVtbl.DiskGetBootVolume((Drv), (Start), (Cnt), (FsType))
-#define MachDiskGetSystemVolume(SysPath, RemPath, Dev, Drv, Start, Cnt, FsType)	MachVtbl.DiskGetSystemVolume((SysPath), (RemPath), (Dev), (Drv), (Start), (Cnt), (FsType))
-#define MachDiskGetBootPath(Path, Size)		MachVtbl.DiskGetBootPath((Path), (Size))
-#define MachDiskGetBootDevice(BootDevice)	MachVtbl.DiskGetBootDevice(BootDevice)
-#define MachDiskBootingFromFloppy()		MachVtbl.DiskBootingFromFloppy()
 #define MachDiskReadLogicalSectors(Drive, Start, Count, Buf)	MachVtbl.DiskReadLogicalSectors((Drive), (Start), (Count), (Buf))
 #define MachDiskGetPartitionEntry(Drive, Part, Entry)	MachVtbl.DiskGetPartitionEntry((Drive), (Part), (Entry))
 #define MachDiskGetDriveGeometry(Drive, Geom)	MachVtbl.DiskGetDriveGeometry((Drive), (Geom))

Modified: trunk/reactos/boot/freeldr/freeldr/inifile/ini.h
--- trunk/reactos/boot/freeldr/freeldr/inifile/ini.h	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/inifile/ini.h	2005-04-23 10:15:49 UTC (rev 14765)
@@ -57,7 +57,7 @@
 extern	ULONG					IniFileSectionCount;
 extern	ULONG					IniFileSettingCount;
 
-PFILE	IniOpenIniFile();
+PFILE	IniOpenIniFile(UCHAR BootDriveNumber, UCHAR BootPartitionNumber);
 
 BOOL	IniParseFile(PUCHAR IniFileData, ULONG IniFileSize);
 ULONG		IniGetNextLineSize(PUCHAR IniFileData, ULONG IniFileSize, ULONG CurrentOffset);

Modified: trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c
--- trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c	2005-04-23 10:14:29 UTC (rev 14764)
+++ trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c	2005-04-23 10:15:49 UTC (rev 14765)
@@ -33,8 +33,23 @@
 	BOOL	Success;
 
 	// Open freeldr.ini
-	Freeldr_Ini = IniOpenIniFile();
+	// BootDrive & BootPartition are passed
+	// in from the boot sector code in the
+	// DL & DH registers.
+	Freeldr_Ini = IniOpenIniFile(BootDrive, BootPartition);
 
+	// If we couldn't open freeldr.ini on the partition
+	// they specified in the boot sector then try
+	// opening the active (boot) partition.
+	if ((Freeldr_Ini == NULL) && (BootPartition != 0))
+	{
+		BootPartition = 0;
+
+		Freeldr_Ini = IniOpenIniFile(BootDrive, BootPartition);
+
+		return FALSE;
+	}
[truncated at 1000 lines; 544 more skipped]