Hi there,
This patch is to blame (seems to, just this) or another... But trunk is broken: build stops with these messages:
[COPY] output-i386\livecd\reactos\system32\ntoskrnl.exe [CC] dll\win32\shell32\shellole.cpp [RSP] obj-i386\dll\win32\shell32\shell32_objs.rsp [LD] output-i386\dll\win32\shell32\shell32.dll [PEFIXUP] output-i386\dll\win32\shell32\shell32.dll [RSYM] output-i386\dll\win32\shell32\shell32.dll [COPY] output-i386\livecd\reactos\system32\shell32.dll [LD] output-i386\boot\freeldr\freeldr\freeldr.sys obj-i386\boot\freeldr\freeldr\arch\i386\hardware_freeldr_arch.o: In function `PcHwDetect': D:/ProgBin/ros/reactos/boot/freeldr/freeldr/arch/i386/hardware.c:1710: undefined reference to `HwInitializeBiosDisks' D:/ProgBin/ros/reactos/boot/freeldr/freeldr/arch/i386/hardware.c:606: undefined reference to `PcBiosDiskCount' D:/ProgBin/ros/reactos/boot/freeldr/freeldr/arch/i386/hardware.c:694: undefined reference to `GetHarddiskIdentifier' D:/ProgBin/ros/reactos/boot/freeldr/freeldr/arch/i386/hardware.c:685: undefined reference to `PcBiosDiskCount' make.exe: *** [output-i386\boot\freeldr\freeldr\freeldr.sys] Error 1
Total Build Time: 00:01:07 D:\ProgBin\ros\reactos>
Best regards, M.A.
On Fri, Sep 30, 2011 at 2:12 AM, tkreuzer@svn.reactos.org wrote:
Author: tkreuzer Date: Thu Sep 29 21:12:40 2011 New Revision: 53896
URL: http://svn.reactos.org/svn/reactos?rev=53896&view=rev Log: [FREELDR]
- Move some disk related stuff that is unrelated to the registry data into a new file, hwdisk.c
- Don't get the disk count from the size value of a structure that was previously calculated from the disk count, but instead save it in a global variable.
- Initialize certain data in a better place
Added: trunk/reactos/boot/freeldr/freeldr/arch/i386/hwdisk.c (with props) Modified: trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c trunk/reactos/boot/freeldr/freeldr/debug.c trunk/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c
Modified: trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/CMakeL... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/CMakeLists.txt [iso-8859-1] Thu Sep 29 21:12:40 2011 @@ -83,6 +83,7 @@ arch/i386/hardware.c arch/i386/hwacpi.c arch/i386/hwapm.c
- arch/i386/hwdisk.c
arch/i386/hwpci.c arch/i386/i386bug.c arch/i386/i386disk.c
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] Thu Sep 29 21:12:40 2011 @@ -82,12 +82,16 @@
DBG_DEFAULT_CHANNEL(HWDETECT);
-static CHAR Hex[] = "0123456789abcdef"; static unsigned int delay_count = 1;
-extern ULONG reactos_disk_count; -extern ARC_DISK_SIGNATURE reactos_arc_disk_info[]; -extern char reactos_arc_strings[32][256]; +extern UCHAR PcBiosDiskCount;
+PCHAR +GetHarddiskIdentifier(
- UCHAR DriveNumber);
+VOID +HwInitializeBiosDisks(VOID);
/* FUNCTIONS ****************************************************************/
@@ -402,218 +406,6 @@ return PartialResourceList; }
-typedef struct tagDISKCONTEXT -{
- UCHAR DriveNumber;
- ULONG SectorSize;
- ULONGLONG SectorOffset;
- ULONGLONG SectorCount;
- ULONGLONG SectorNumber;
-} DISKCONTEXT;
-static LONG DiskClose(ULONG FileId) -{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- MmHeapFree(Context);
- return ESUCCESS;
-}
-static LONG DiskGetFileInformation(ULONG FileId, FILEINFORMATION* Information) -{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- RtlZeroMemory(Information, sizeof(FILEINFORMATION));
- Information->EndingAddress.QuadPart = (Context->SectorOffset + Context->SectorCount) * Context->SectorSize;
- Information->CurrentAddress.QuadPart = (Context->SectorOffset + Context->SectorNumber) * Context->SectorSize;
- return ESUCCESS;
-}
-static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) -{
- DISKCONTEXT* Context;
- UCHAR DriveNumber;
- ULONG DrivePartition, SectorSize;
- ULONGLONG SectorOffset = 0;
- ULONGLONG SectorCount = 0;
- PARTITION_TABLE_ENTRY PartitionTableEntry;
- CHAR FileName[1];
- if (!DissectArcPath(Path, FileName, &DriveNumber, &DrivePartition))
- return EINVAL;
- if (DrivePartition == 0xff)
- {
- /* This is a CD-ROM device */
- SectorSize = 2048;
- }
- else
- {
- /* This is either a floppy disk device (DrivePartition == 0) or
- * a hard disk device (DrivePartition != 0 && DrivePartition != 0xFF) but
- * it doesn't matter which one because they both have 512 bytes per sector */
- SectorSize = 512;
- }
- if (DrivePartition != 0xff && DrivePartition != 0)
- {
- if (!DiskGetPartitionEntry(DriveNumber, DrivePartition, &PartitionTableEntry))
- return EINVAL;
- SectorOffset = PartitionTableEntry.SectorCountBeforePartition;
- SectorCount = PartitionTableEntry.PartitionSectorCount;
- }
- Context = MmHeapAlloc(sizeof(DISKCONTEXT));
- if (!Context)
- return ENOMEM;
- Context->DriveNumber = DriveNumber;
- Context->SectorSize = SectorSize;
- Context->SectorOffset = SectorOffset;
- Context->SectorCount = SectorCount;
- Context->SectorNumber = 0;
- FsSetDeviceSpecific(*FileId, Context);
- return ESUCCESS;
-}
-static LONG DiskRead(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count) -{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- UCHAR* Ptr = (UCHAR*)Buffer;
- ULONG i, Length;
- BOOLEAN ret;
- *Count = 0;
- i = 0;
- while (N > 0)
- {
- Length = N;
- if (Length > Context->SectorSize)
- Length = Context->SectorSize;
- ret = MachDiskReadLogicalSectors(
- Context->DriveNumber,
- Context->SectorNumber + Context->SectorOffset + i,
- 1,
- (PVOID)DISKREADBUFFER);
- if (!ret)
- return EIO;
- RtlCopyMemory(Ptr, (PVOID)DISKREADBUFFER, Length);
- Ptr += Length;
- *Count += Length;
- N -= Length;
- i++;
- }
- return ESUCCESS;
-}
-static LONG DiskSeek(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode) -{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- if (SeekMode != SeekAbsolute)
- return EINVAL;
- if (Position->LowPart & (Context->SectorSize - 1))
- return EINVAL;
- /* FIXME: take HighPart into account */
- Context->SectorNumber = Position->LowPart / Context->SectorSize;
- return ESUCCESS;
-}
-static const DEVVTBL DiskVtbl = {
- DiskClose,
- DiskGetFileInformation,
- DiskOpen,
- DiskRead,
- DiskSeek,
-};
-static VOID -GetHarddiskIdentifier(PCHAR Identifier,
- UCHAR DriveNumber)
-{
- PMASTER_BOOT_RECORD Mbr;
- ULONG *Buffer;
- ULONG i;
- ULONG Checksum;
- ULONG Signature;
- CHAR ArcName[256];
- PARTITION_TABLE_ENTRY PartitionTableEntry;
- /* Read the MBR */
- if (!MachDiskReadLogicalSectors(DriveNumber, 0ULL, 1, (PVOID)DISKREADBUFFER))
- {
- ERR("Reading MBR failed\n");
- return;
- }
- Buffer = (ULONG*)DISKREADBUFFER;
- Mbr = (PMASTER_BOOT_RECORD)DISKREADBUFFER;
- Signature = Mbr->Signature;
- TRACE("Signature: %x\n", Signature);
- /* Calculate the MBR checksum */
- Checksum = 0;
- for (i = 0; i < 128; i++)
- {
- Checksum += Buffer[i];
- }
- Checksum = ~Checksum + 1;
- TRACE("Checksum: %x\n", Checksum);
- /* Fill out the ARC disk block */
- reactos_arc_disk_info[reactos_disk_count].Signature = Signature;
- reactos_arc_disk_info[reactos_disk_count].CheckSum = Checksum;
- sprintf(ArcName, "multi(0)disk(0)rdisk(%lu)", reactos_disk_count);
- strcpy(reactos_arc_strings[reactos_disk_count], ArcName);
- reactos_arc_disk_info[reactos_disk_count].ArcName =
- reactos_arc_strings[reactos_disk_count];
- reactos_disk_count++;
- sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(0)", DriveNumber - 0x80);
- FsRegisterDevice(ArcName, &DiskVtbl);
- /* Add partitions */
- i = 1;
- DiskReportError(FALSE);
- while (DiskGetPartitionEntry(DriveNumber, i, &PartitionTableEntry))
- {
- if (PartitionTableEntry.SystemIndicator != PARTITION_ENTRY_UNUSED)
- {
- sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(%lu)", DriveNumber - 0x80, i);
- FsRegisterDevice(ArcName, &DiskVtbl);
- }
- i++;
- }
- DiskReportError(TRUE);
- /* Convert checksum and signature to identifier string */
- Identifier[0] = Hex[(Checksum >> 28) & 0x0F];
- Identifier[1] = Hex[(Checksum >> 24) & 0x0F];
- Identifier[2] = Hex[(Checksum >> 20) & 0x0F];
- Identifier[3] = Hex[(Checksum >> 16) & 0x0F];
- Identifier[4] = Hex[(Checksum >> 12) & 0x0F];
- Identifier[5] = Hex[(Checksum >> 8) & 0x0F];
- Identifier[6] = Hex[(Checksum >> 4) & 0x0F];
- Identifier[7] = Hex[Checksum & 0x0F];
- Identifier[8] = '-';
- Identifier[9] = Hex[(Signature >> 28) & 0x0F];
- Identifier[10] = Hex[(Signature >> 24) & 0x0F];
- Identifier[11] = Hex[(Signature >> 20) & 0x0F];
- Identifier[12] = Hex[(Signature >> 16) & 0x0F];
- Identifier[13] = Hex[(Signature >> 12) & 0x0F];
- Identifier[14] = Hex[(Signature >> 8) & 0x0F];
- Identifier[15] = Hex[(Signature >> 4) & 0x0F];
- Identifier[16] = Hex[Signature & 0x0F];
- Identifier[17] = '-';
- Identifier[18] = 'A';
- Identifier[19] = 0;
- TRACE("Identifier: %s\n", Identifier);
-}
static UCHAR GetFloppyCount(VOID) { @@ -810,37 +602,8 @@ UCHAR DiskCount; USHORT i; ULONG Size;
- BOOLEAN Changed;
- /* Count the number of visible drives */
- DiskReportError(FALSE);
- DiskCount = 0;
- /* There are some really broken BIOSes out there. There are even BIOSes
- * that happily report success when you ask them to read from non-existent
- * harddisks. So, we set the buffer to known contents first, then try to
- * read. If the BIOS reports success but the buffer contents haven't
- * changed then we fail anyway */
- memset((PVOID) DISKREADBUFFER, 0xcd, 512);
- while (MachDiskReadLogicalSectors(0x80 + DiskCount, 0ULL, 1, (PVOID)DISKREADBUFFER))
- {
- Changed = FALSE;
- for (i = 0; ! Changed && i < 512; i++)
- {
- Changed = ((PUCHAR)DISKREADBUFFER)[i] != 0xcd;
- }
- if (! Changed)
- {
- TRACE("BIOS reports success for disk %d but data didn't change\n",
- (int)DiskCount);
- break;
- }
- DiskCount++;
- memset((PVOID) DISKREADBUFFER, 0xcd, 512);
- }
- DiskReportError(TRUE);
- TRACE("BIOS reports %d harddisk%s\n",
- (int)DiskCount, (DiskCount == 1) ? "": "s");
- DiskCount = PcBiosDiskCount;
/* Allocate resource descriptor */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + @@ -900,49 +663,11 @@ return SystemKey; }
-static UCHAR -GetDiskCount(PCONFIGURATION_COMPONENT_DATA BusKey) -{
- PCONFIGURATION_COMPONENT_DATA System;
- ULONG ConfigurationDataLength;
- UCHAR DiskCount = 0;
- //
- // Get root component
- //
- System = BusKey;
- while (System->Parent)
- System = System->Parent;
- //
- // Get root configuration data length
- //
- ConfigurationDataLength = System->ComponentEntry.ConfigurationDataLength;
- //
- // We assume that nothing wrong happened, and that configuration
- // only consists of one CM_PARTIAL_RESOURCE_LIST entry, followed
- // by n entries of CM_INT13_DRIVE_PARAMETER
- //
- if (ConfigurationDataLength > 0)
- DiskCount = (UCHAR)((ConfigurationDataLength - sizeof(CM_PARTIAL_RESOURCE_LIST))
- / sizeof(CM_INT13_DRIVE_PARAMETER));
- //
- // Return number of disks
- //
- TRACE("Retrieving %lu INT13 disks\0\n", DiskCount);
- return DiskCount;
-};
static VOID DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA BusKey) { PCONFIGURATION_COMPONENT_DATA DiskKey, ControllerKey;
- BOOLEAN BootDriveReported = FALSE;
ULONG i;
- UCHAR DiskCount = GetDiskCount(BusKey);
- CHAR BootPath[512];
FldrCreateComponentKey(BusKey, ControllerClass, @@ -957,19 +682,16 @@ TRACE("Created key: DiskController\0\n");
/* Create and fill subkey for each harddisk */
- for (i = 0; i < DiskCount; i++)
- for (i = 0; i < PcBiosDiskCount; i++)
{ PCM_PARTIAL_RESOURCE_LIST PartialResourceList; ULONG Size;
- CHAR Identifier[20];
- PCHAR Identifier;
UCHAR DriveNumber = 0x80 + (UCHAR)i;
- if (FrldrBootDrive == DriveNumber)
- BootDriveReported = TRUE;
/* Get disk values */ PartialResourceList = GetHarddiskConfigurationData(DriveNumber, &Size);
- GetHarddiskIdentifier(Identifier, DriveNumber);
- Identifier = GetHarddiskIdentifier(DriveNumber);
/* Create disk key */ FldrCreateComponentKey(ControllerKey, @@ -984,40 +706,6 @@ &DiskKey); }
- /* Get the drive we're booting from */
- MachDiskGetBootPath(BootPath, sizeof(BootPath));
- /* Add it, if it's a floppy or cdrom */
- if ((FrldrBootDrive >= 0x80 && !BootDriveReported) ||
- DiskIsDriveRemovable(FrldrBootDrive))
- {
- /* TODO: Check if it's really a cdrom drive */
- ULONG* Buffer;
- ULONG Checksum = 0;
- /* Read the MBR */
- if (!MachDiskReadLogicalSectors(FrldrBootDrive, 16ULL, 1, (PVOID)DISKREADBUFFER))
- {
- ERR("Reading MBR failed\n");
- return;
- }
- Buffer = (ULONG*)DISKREADBUFFER;
- /* Calculate the MBR checksum */
- for (i = 0; i < 2048 / sizeof(ULONG); i++) Checksum += Buffer[i];
- Checksum = ~Checksum + 1;
- TRACE("Checksum: %x\n", Checksum);
- /* Fill out the ARC disk block */
- reactos_arc_disk_info[reactos_disk_count].CheckSum = Checksum;
- strcpy(reactos_arc_strings[reactos_disk_count], BootPath);
- reactos_arc_disk_info[reactos_disk_count].ArcName =
- reactos_arc_strings[reactos_disk_count];
- reactos_disk_count++;
- FsRegisterDevice(BootPath, &DiskVtbl);
- }
}
static VOID @@ -2019,6 +1707,8 @@
TRACE("DetectHardware()\n");
- HwInitializeBiosDisks();
/* Create the 'System' key */ SystemKey = DetectSystem();
Added: trunk/reactos/boot/freeldr/freeldr/arch/i386/hwdisk.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/hwdisk.c (added) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/hwdisk.c [iso-8859-1] Thu Sep 29 21:12:40 2011 @@ -1,0 +1,342 @@ +/*
- FreeLoader
- Copyright (C) 2003, 2004 Eric Kohl
- Copyright (C) 2009 Hervé Poussineau
- 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.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
+#include <freeldr.h>
+#define NDEBUG +#include <debug.h>
+DBG_DEFAULT_CHANNEL(HWDETECT);
+typedef struct tagDISKCONTEXT +{
- UCHAR DriveNumber;
- ULONG SectorSize;
- ULONGLONG SectorOffset;
- ULONGLONG SectorCount;
- ULONGLONG SectorNumber;
+} DISKCONTEXT;
+extern ULONG reactos_disk_count; +extern ARC_DISK_SIGNATURE reactos_arc_disk_info[]; +extern char reactos_arc_strings[32][256];
+static CHAR Hex[] = "0123456789abcdef"; +UCHAR PcBiosDiskCount = 0; +CHAR PcDiskIdentifier[32][20];
+static LONG DiskClose(ULONG FileId) +{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- MmHeapFree(Context);
- return ESUCCESS;
+}
+static LONG DiskGetFileInformation(ULONG FileId, FILEINFORMATION* Information) +{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- RtlZeroMemory(Information, sizeof(FILEINFORMATION));
- Information->EndingAddress.QuadPart = (Context->SectorOffset + Context->SectorCount) * Context->SectorSize;
- Information->CurrentAddress.QuadPart = (Context->SectorOffset + Context->SectorNumber) * Context->SectorSize;
- return ESUCCESS;
+}
+static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId) +{
- DISKCONTEXT* Context;
- UCHAR DriveNumber;
- ULONG DrivePartition, SectorSize;
- ULONGLONG SectorOffset = 0;
- ULONGLONG SectorCount = 0;
- PARTITION_TABLE_ENTRY PartitionTableEntry;
- CHAR FileName[1];
- if (!DissectArcPath(Path, FileName, &DriveNumber, &DrivePartition))
- return EINVAL;
- if (DrivePartition == 0xff)
- {
- /* This is a CD-ROM device */
- SectorSize = 2048;
- }
- else
- {
- /* This is either a floppy disk device (DrivePartition == 0) or
- * a hard disk device (DrivePartition != 0 && DrivePartition != 0xFF) but
- * it doesn't matter which one because they both have 512 bytes per sector */
- SectorSize = 512;
- }
- if (DrivePartition != 0xff && DrivePartition != 0)
- {
- if (!DiskGetPartitionEntry(DriveNumber, DrivePartition, &PartitionTableEntry))
- return EINVAL;
- SectorOffset = PartitionTableEntry.SectorCountBeforePartition;
- SectorCount = PartitionTableEntry.PartitionSectorCount;
- }
- Context = MmHeapAlloc(sizeof(DISKCONTEXT));
- if (!Context)
- return ENOMEM;
- Context->DriveNumber = DriveNumber;
- Context->SectorSize = SectorSize;
- Context->SectorOffset = SectorOffset;
- Context->SectorCount = SectorCount;
- Context->SectorNumber = 0;
- FsSetDeviceSpecific(*FileId, Context);
- return ESUCCESS;
+}
+static LONG DiskRead(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count) +{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- UCHAR* Ptr = (UCHAR*)Buffer;
- ULONG i, Length;
- BOOLEAN ret;
- *Count = 0;
- i = 0;
- while (N > 0)
- {
- Length = N;
- if (Length > Context->SectorSize)
- Length = Context->SectorSize;
- ret = MachDiskReadLogicalSectors(
- Context->DriveNumber,
- Context->SectorNumber + Context->SectorOffset + i,
- 1,
- (PVOID)DISKREADBUFFER);
- if (!ret)
- return EIO;
- RtlCopyMemory(Ptr, (PVOID)DISKREADBUFFER, Length);
- Ptr += Length;
- *Count += Length;
- N -= Length;
- i++;
- }
- return ESUCCESS;
+}
+static LONG DiskSeek(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode) +{
- DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
- if (SeekMode != SeekAbsolute)
- return EINVAL;
- if (Position->LowPart & (Context->SectorSize - 1))
- return EINVAL;
- /* FIXME: take HighPart into account */
- Context->SectorNumber = Position->LowPart / Context->SectorSize;
- return ESUCCESS;
+}
+static const DEVVTBL DiskVtbl = {
- DiskClose,
- DiskGetFileInformation,
- DiskOpen,
- DiskRead,
- DiskSeek,
+};
+PCHAR +GetHarddiskIdentifier(
- UCHAR DriveNumber)
+{
- return PcDiskIdentifier[DriveNumber - 0x80];
+}
+VOID +GetHarddiskInformation(
- UCHAR DriveNumber)
+{
- PMASTER_BOOT_RECORD Mbr;
- ULONG *Buffer;
- ULONG i;
- ULONG Checksum;
- ULONG Signature;
- CHAR ArcName[256];
- PARTITION_TABLE_ENTRY PartitionTableEntry;
- PCHAR Identifier = PcDiskIdentifier[DriveNumber - 0x80];
- /* Read the MBR */
- if (!MachDiskReadLogicalSectors(DriveNumber, 0ULL, 1, (PVOID)DISKREADBUFFER))
- {
- ERR("Reading MBR failed\n");
- return;
- }
- Buffer = (ULONG*)DISKREADBUFFER;
- Mbr = (PMASTER_BOOT_RECORD)DISKREADBUFFER;
- Signature = Mbr->Signature;
- TRACE("Signature: %x\n", Signature);
- /* Calculate the MBR checksum */
- Checksum = 0;
- for (i = 0; i < 128; i++)
- {
- Checksum += Buffer[i];
- }
- Checksum = ~Checksum + 1;
- TRACE("Checksum: %x\n", Checksum);
- /* Fill out the ARC disk block */
- reactos_arc_disk_info[reactos_disk_count].Signature = Signature;
- reactos_arc_disk_info[reactos_disk_count].CheckSum = Checksum;
- sprintf(ArcName, "multi(0)disk(0)rdisk(%lu)", reactos_disk_count);
- strcpy(reactos_arc_strings[reactos_disk_count], ArcName);
- reactos_arc_disk_info[reactos_disk_count].ArcName =
- reactos_arc_strings[reactos_disk_count];
- reactos_disk_count++;
- sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(0)", DriveNumber - 0x80);
- FsRegisterDevice(ArcName, &DiskVtbl);
- /* Add partitions */
- i = 1;
- DiskReportError(FALSE);
- while (DiskGetPartitionEntry(DriveNumber, i, &PartitionTableEntry))
- {
- if (PartitionTableEntry.SystemIndicator != PARTITION_ENTRY_UNUSED)
- {
- sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(%lu)", DriveNumber - 0x80, i);
- FsRegisterDevice(ArcName, &DiskVtbl);
- }
- i++;
- }
- DiskReportError(TRUE);
- /* Convert checksum and signature to identifier string */
- Identifier[0] = Hex[(Checksum >> 28) & 0x0F];
- Identifier[1] = Hex[(Checksum >> 24) & 0x0F];
- Identifier[2] = Hex[(Checksum >> 20) & 0x0F];
- Identifier[3] = Hex[(Checksum >> 16) & 0x0F];
- Identifier[4] = Hex[(Checksum >> 12) & 0x0F];
- Identifier[5] = Hex[(Checksum >> 8) & 0x0F];
- Identifier[6] = Hex[(Checksum >> 4) & 0x0F];
- Identifier[7] = Hex[Checksum & 0x0F];
- Identifier[8] = '-';
- Identifier[9] = Hex[(Signature >> 28) & 0x0F];
- Identifier[10] = Hex[(Signature >> 24) & 0x0F];
- Identifier[11] = Hex[(Signature >> 20) & 0x0F];
- Identifier[12] = Hex[(Signature >> 16) & 0x0F];
- Identifier[13] = Hex[(Signature >> 12) & 0x0F];
- Identifier[14] = Hex[(Signature >> 8) & 0x0F];
- Identifier[15] = Hex[(Signature >> 4) & 0x0F];
- Identifier[16] = Hex[Signature & 0x0F];
- Identifier[17] = '-';
- Identifier[18] = 'A';
- Identifier[19] = 0;
- TRACE("Identifier: %s\n", Identifier);
+}
+VOID +HwInitializeBiosDisks(VOID) +{
- UCHAR DiskCount, DriveNumber;
- ULONG i;
- BOOLEAN Changed;
- CHAR BootPath[512];
- BOOLEAN BootDriveReported = FALSE;
- /* Count the number of visible drives */
- DiskReportError(FALSE);
- DiskCount = 0;
- DriveNumber = 0x80;
- /* There are some really broken BIOSes out there. There are even BIOSes
- * that happily report success when you ask them to read from non-existent
- * harddisks. So, we set the buffer to known contents first, then try to
- * read. If the BIOS reports success but the buffer contents haven't
- * changed then we fail anyway */
- memset((PVOID) DISKREADBUFFER, 0xcd, 512);
- while (MachDiskReadLogicalSectors(DriveNumber, 0ULL, 1, (PVOID)DISKREADBUFFER))
- {
- Changed = FALSE;
- for (i = 0; ! Changed && i < 512; i++)
- {
- Changed = ((PUCHAR)DISKREADBUFFER)[i] != 0xcd;
- }
- if (! Changed)
- {
- TRACE("BIOS reports success for disk %d but data didn't change\n",
- (int)DiskCount);
- break;
- }
- GetHarddiskInformation(DriveNumber);
- if (FrldrBootDrive == DriveNumber)
- BootDriveReported = TRUE;
- DiskCount++;
- DriveNumber++;
- memset((PVOID) DISKREADBUFFER, 0xcd, 512);
- }
- DiskReportError(TRUE);
- TRACE("BIOS reports %d harddisk%s\n",
- (int)DiskCount, (DiskCount == 1) ? "": "s");
- /* Get the drive we're booting from */
- MachDiskGetBootPath(BootPath, sizeof(BootPath));
- /* Add it, if it's a floppy or cdrom */
- if ((FrldrBootDrive >= 0x80 && !BootDriveReported) ||
- DiskIsDriveRemovable(FrldrBootDrive))
- {
- /* TODO: Check if it's really a cdrom drive */
- ULONG* Buffer;
- ULONG Checksum = 0;
- /* Read the MBR */
- if (!MachDiskReadLogicalSectors(FrldrBootDrive, 16ULL, 1, (PVOID)DISKREADBUFFER))
- {
- ERR("Reading MBR failed\n");
- return;
- }
- Buffer = (ULONG*)DISKREADBUFFER;
- /* Calculate the MBR checksum */
- for (i = 0; i < 2048 / sizeof(ULONG); i++) Checksum += Buffer[i];
- Checksum = ~Checksum + 1;
- TRACE("Checksum: %x\n", Checksum);
- /* Fill out the ARC disk block */
- reactos_arc_disk_info[reactos_disk_count].CheckSum = Checksum;
- strcpy(reactos_arc_strings[reactos_disk_count], BootPath);
- reactos_arc_disk_info[reactos_disk_count].ArcName =
- reactos_arc_strings[reactos_disk_count];
- reactos_disk_count++;
- FsRegisterDevice(BootPath, &DiskVtbl);
- }
- PcBiosDiskCount = DiskCount;
+}
Propchange: trunk/reactos/boot/freeldr/freeldr/arch/i386/hwdisk.c
svn:eol-style = native
Modified: trunk/reactos/boot/freeldr/freeldr/debug.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/debug.... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/debug.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/debug.c [iso-8859-1] Thu Sep 29 21:12:40 2011 @@ -289,7 +289,6 @@ }
//DECLSPEC_NORETURN -NTKERNELAPI VOID NTAPI KeBugCheckEx(
Modified: trunk/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/freeld... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild [iso-8859-1] Thu Sep 29 21:12:40 2011 @@ -19,6 +19,7 @@ <file>hardware.c</file> <file>hwacpi.c</file> <file>hwapm.c</file>
- <file>hwdisk.c</file>
<file>hwpci.c</file> <file>i386bug.c</file> <file>i386disk.c</file>
Modified: trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/inifil... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/inifile/ini_init.c [iso-8859-1] Thu Sep 29 21:12:40 2011 @@ -18,6 +18,8 @@ */
#include <freeldr.h> +#include <debug.h> +DBG_DEFAULT_CHANNEL(INIFILE);
static LONG IniOpenIniFile(ULONG* FileId) { @@ -44,6 +46,7 @@ ULONG FreeLoaderIniFileSize, Count; LONG ret; BOOLEAN Success;
- TRACE("IniFileInitialize()\n");
// // Open freeldr.ini