Author: hpoussin Date: Sun Oct 18 20:24:35 2009 New Revision: 43565
URL: http://svn.reactos.org/svn/reactos?rev=43565&view=rev Log: [freeldr/i386] Read up to 128 sectors at once
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c trunk/reactos/boot/freeldr/freeldr/include/arch.h
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] Sun Oct 18 20:24:35 2009 @@ -467,7 +467,7 @@ { DISKCONTEXT* Context = FsGetDeviceSpecific(FileId); UCHAR* Ptr = (UCHAR*)Buffer; - ULONG i, Length; + ULONG i, Length, Sectors; BOOLEAN ret;
*Count = 0; @@ -475,12 +475,13 @@ while (N > 0) { Length = N; - if (Length > Context->SectorSize) - Length = Context->SectorSize; + if (Length > DISKREADBUFFER_SIZE) + Length = DISKREADBUFFER_SIZE; + Sectors = (Length + Context->SectorSize - 1) / Context->SectorSize; ret = MachDiskReadLogicalSectors( Context->DriveNumber, Context->SectorNumber + Context->SectorOffset + i, - 1, + Sectors, (PVOID)DISKREADBUFFER); if (!ret) return EIO; @@ -488,7 +489,7 @@ Ptr += Length; *Count += Length; N -= Length; - i++; + i += Sectors; }
return ESUCCESS;
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c [iso-8859-1] Sun Oct 18 20:24:35 2009 @@ -168,7 +168,7 @@ { DISKCONTEXT* Context = FsGetDeviceSpecific(FileId); UCHAR* Ptr = (UCHAR*)Buffer; - ULONG i, Length; + ULONG i, Length, Sectors; BOOLEAN ret;
*Count = 0; @@ -176,12 +176,13 @@ while (N > 0) { Length = N; - if (Length > Context->SectorSize) - Length = Context->SectorSize; + if (Length > DISKREADBUFFER_SIZE) + Length = DISKREADBUFFER_SIZE; + Sectors = (Length + Context->SectorSize - 1) / Context->SectorSize; ret = MachDiskReadLogicalSectors( Context->DriveNumber, Context->SectorNumber + Context->SectorOffset + i, - 1, + Sectors, (PVOID)DISKREADBUFFER); if (!ret) return EIO; @@ -189,7 +190,7 @@ Ptr += Length; *Count += Length; N -= Length; - i++; + i += Sectors; }
return ESUCCESS;
Modified: trunk/reactos/boot/freeldr/freeldr/include/arch.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/includ... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/include/arch.h [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/include/arch.h [iso-8859-1] Sun Oct 18 20:24:35 2009 @@ -46,6 +46,7 @@ #define BIOSCALLBUFOFFSET 0x0000 /* Buffer to store temporary data for any Int386() call */ #define FILESYSBUFFER 0x80000 /* Buffer to store file system data (e.g. cluster buffer for FAT) */ #define DISKREADBUFFER 0x90000 /* Buffer to store data read in from the disk via the BIOS */ +#define DISKREADBUFFER_SIZE 0x10000 #elif defined(_M_PPC) || defined(_M_MIPS) || defined(_M_ARM) #define DISKREADBUFFER 0x80000000 #define FILESYSBUFFER 0x80000000