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
Op 30-9-2011 12:17, Minas Abrahamyan schreef:
Hi there,
This patch is to blame (seems to, just this) or another... But trunk is broken: build stops with these messages:
Are you sure? http://www.reactos.org/getbuilds/ has rev53904 built.
Your issue might be compiler or build system specific ofcourse.
53901 (Debug, Cmake, BootCD) worked fine for me in VMWare (with exception of Gecko failing to install on 64MB yet succeeding at 128MB).
On Fri, Sep 30, 2011 at 3:47 PM, Timo Kreuzer timo.kreuzer@web.de wrote:
Am 30.09.2011 12:17, schrieb Minas Abrahamyan:
Hi there,
This patch is to blame (seems to, just this) or another... But trunk is broken: build stops with these messages:
You need to clean freeldr_arch and freeldr_base. Or use cmake :)
Initially I cleaned these directories, then cleaned all, by make clean. ...same result.
Maybe all of you use cmake? :) BTW is switching to cmake already performed?
Regards, Minas
Regards, Timo
I had the same issues. Just run "clean" and that will fix it (at the expense of a full rebuild). I also tried "make freeldr_clean (and setupldr) with no luck. I think the problem is from how weird the freeldr rbuild files are done.
Cameron
On Sep 30, 2011, at 8:31 AM, Minas Abrahamyan minas.subs@gmail.com wrote:
On Fri, Sep 30, 2011 at 3:47 PM, Timo Kreuzer timo.kreuzer@web.de wrote:
Am 30.09.2011 12:17, schrieb Minas Abrahamyan:
Hi there,
This patch is to blame (seems to, just this) or another... But trunk is broken: build stops with these messages:
You need to clean freeldr_arch and freeldr_base. Or use cmake :)
Initially I cleaned these directories, then cleaned all, by make clean. ...same result.
Maybe all of you use cmake? :) BTW is switching to cmake already performed?
Regards, Minas
Regards, Timo
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Why are there still 2 build systems? It's been like this for 3 or 4 months now and you still have the problem where some people are using rbuild and some people are using cmake.
Is it because writing an OS is too easy and you all need more of a challenge?
You now have the following developer configurations:
Build System Compiler Platform rbuild gcc windows rbuild gcc linux cmake gcc windows cmake gcc linux cmake msvc windows
Add to that 4 different flavours of developer virtual machine and it's no wonder you're constantly tripping up over each other.
I'm sure you all don't want to hear me rant about best practice and how this should be fixed, but someone needs to step in and try to define some sort of base development platform.
Ged.
-----Original Message----- From: ros-dev-bounces@reactos.org [mailto:ros-dev-bounces@reactos.org] On Behalf Of Cameron Gutman Sent: 30 September 2011 13:47 To: ReactOS Development List Subject: Re: [ros-dev] trunk is broken Re: [ros-diffs] [tkreuzer] 53896: [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 pr...
I had the same issues. Just run "clean" and that will fix it (at the expense of a full rebuild). I also tried "make freeldr_clean (and setupldr) with no luck. I think the problem is from how weird the freeldr rbuild files are done.
Cameron
On Sep 30, 2011, at 8:31 AM, Minas Abrahamyan minas.subs@gmail.com wrote:
On Fri, Sep 30, 2011 at 3:47 PM, Timo Kreuzer timo.kreuzer@web.de wrote:
Am 30.09.2011 12:17, schrieb Minas Abrahamyan:
Hi there,
This patch is to blame (seems to, just this) or another... But trunk is broken: build stops with these messages:
You need to clean freeldr_arch and freeldr_base. Or use cmake :)
Initially I cleaned these directories, then cleaned all, by make clean. ...same result.
Maybe all of you use cmake? :) BTW is switching to cmake already performed?
Regards, Minas
Regards, Timo
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
_______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
Am 30.09.2011 15:08, schrieb Ged Murphy:
Why are there still 2 build systems?
If you were present at the last meeting, you should know the answer.
It's been like this for 3 or 4 months now and you still have the problem where some people are using rbuild and some people are using cmake.
you're telling nothing new...
I'm sure you all don't want to hear me rant about best practice and how this should be fixed, but someone needs to step in and try to define some sort of base development platform.
No, we don't want to hear you to rant. Ranting is something we can prefectly do ourselves, and it doesn't help fixing the problem, believe me, I've tried ;-) Instead you could have come up with a practical solution month ago. Or even better fix the issue. Hint: it's not like BEs fall from the sky and buildbot scripts are generating themselves.
Regards, Timo
Timo Kreuzer wrote:
Am 30.09.2011 15:08, schrieb Ged Murphy:
Why are there still 2 build systems?
If you were present at the last meeting, you should know the answer.
Very helpful. Thanks for the explanation Alex.
I'm sure you all don't want to hear me rant about best practice and how
this
should be fixed, but someone needs to step in and try to define some
sort of
base development platform.
No, we don't want to hear you to rant. Ranting is something we can prefectly do ourselves, and it doesn't help fixing the problem, believe me, I've tried ;-)
Well maybe it would help to fix the problem if someone pointed out why this is a bad idea instead of ranting about things like "you broke the cmake build" or "well it works fine with rbuild on windows" or "someone broke the linux build machine again"
Instead you could have come up with a practical solution month ago. Or even better fix the issue. Hint: it's not like BEs fall from the sky and buildbot scripts are generating themselves.
I'll fix the issue quite simply. Until cmake is ready, it shouldn't be used by anyone for development. If it's still work in progress then it's not part of the official toolset and should be treated as being broken.
You can't have half of the developers using one thing and the other half using another.
Everyone working on reactos should be using the same build environment, which is also the build environment that the build machine should be using. Anyone who chooses to move away from this environment is more than welcome to, but any issues this brings are for those people to solve along with the help of the willing community.
Ged.
"Very helpful. Thanks for the explanation Alex."
????
The post was from Timo.
Best regards, Alex Ionescu
On Fri, Sep 30, 2011 at 12:11 PM, Ged Murphy gedmurphy.maillists@gmail.comwrote:
Timo Kreuzer wrote:
Am 30.09.2011 15:08, schrieb Ged Murphy:
Why are there still 2 build systems?
If you were present at the last meeting, you should know the answer.
Very helpful. Thanks for the explanation Alex.
I'm sure you all don't want to hear me rant about best practice and how
this
should be fixed, but someone needs to step in and try to define some
sort of
base development platform.
No, we don't want to hear you to rant. Ranting is something we can prefectly do ourselves, and it doesn't help fixing the problem, believe me, I've tried ;-)
Well maybe it would help to fix the problem if someone pointed out why this is a bad idea instead of ranting about things like "you broke the cmake build" or "well it works fine with rbuild on windows" or "someone broke the linux build machine again"
Instead you could have come up with a practical solution month ago. Or even better fix the issue. Hint: it's not like BEs fall from the sky and buildbot scripts are generating themselves.
I'll fix the issue quite simply. Until cmake is ready, it shouldn't be used by anyone for development. If it's still work in progress then it's not part of the official toolset and should be treated as being broken.
You can't have half of the developers using one thing and the other half using another.
Everyone working on reactos should be using the same build environment, which is also the build environment that the build machine should be using. Anyone who chooses to move away from this environment is more than welcome to, but any issues this brings are for those people to solve along with the help of the willing community.
Ged.
Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev
On Sep 30, 2011, at 5:08 PM, Ged Murphy wrote:
I'm sure you all don't want to hear me rant about best practice and how this should be fixed
I will try an educated guess:
cmake msvc windows
;)