[FREELDR] i386/hwdisk.c: Use FIRST_BIOS_DISK and FIRST_PARTITION macros like what's done in UEFI code.

This commit is contained in:
Hermès Bélusca-Maïto 2024-03-09 11:25:10 +01:00
parent 6185c66c61
commit 1e409e6902
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

@ -28,6 +28,9 @@ DBG_DEFAULT_CHANNEL(HWDETECT);
* This is the common code for harddisk for both the PC and the XBOX. * This is the common code for harddisk for both the PC and the XBOX.
*/ */
#define FIRST_BIOS_DISK 0x80
#define FIRST_PARTITION 1
typedef struct tagDISKCONTEXT typedef struct tagDISKCONTEXT
{ {
UCHAR DriveNumber; UCHAR DriveNumber;
@ -248,7 +251,7 @@ static const DEVVTBL DiskVtbl =
PCHAR PCHAR
GetHarddiskIdentifier(UCHAR DriveNumber) GetHarddiskIdentifier(UCHAR DriveNumber)
{ {
return PcDiskIdentifier[DriveNumber - 0x80]; return PcDiskIdentifier[DriveNumber - FIRST_BIOS_DISK];
} }
static VOID static VOID
@ -262,7 +265,7 @@ GetHarddiskInformation(UCHAR DriveNumber)
BOOLEAN ValidPartitionTable; BOOLEAN ValidPartitionTable;
CHAR ArcName[MAX_PATH]; CHAR ArcName[MAX_PATH];
PARTITION_TABLE_ENTRY PartitionTableEntry; PARTITION_TABLE_ENTRY PartitionTableEntry;
PCHAR Identifier = PcDiskIdentifier[DriveNumber - 0x80]; PCHAR Identifier = PcDiskIdentifier[DriveNumber - FIRST_BIOS_DISK];
/* Detect disk partition type */ /* Detect disk partition type */
DiskDetectPartitionType(DriveNumber); DiskDetectPartitionType(DriveNumber);
@ -272,7 +275,7 @@ GetHarddiskInformation(UCHAR DriveNumber)
{ {
ERR("Reading MBR failed\n"); ERR("Reading MBR failed\n");
/* We failed, use a default identifier */ /* We failed, use a default identifier */
sprintf(Identifier, "BIOSDISK%d", DriveNumber - 0x80 + 1); sprintf(Identifier, "BIOSDISK%d", DriveNumber - FIRST_BIOS_DISK + 1);
return; return;
} }
@ -294,20 +297,20 @@ GetHarddiskInformation(UCHAR DriveNumber)
ValidPartitionTable = (Mbr->MasterBootRecordMagic == 0xAA55); ValidPartitionTable = (Mbr->MasterBootRecordMagic == 0xAA55);
/* Fill out the ARC disk block */ /* Fill out the ARC disk block */
sprintf(ArcName, "multi(0)disk(0)rdisk(%u)", DriveNumber - 0x80); sprintf(ArcName, "multi(0)disk(0)rdisk(%u)", DriveNumber - FIRST_BIOS_DISK);
AddReactOSArcDiskInfo(ArcName, Signature, Checksum, ValidPartitionTable); AddReactOSArcDiskInfo(ArcName, Signature, Checksum, ValidPartitionTable);
sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(0)", DriveNumber - 0x80); sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(0)", DriveNumber - FIRST_BIOS_DISK);
FsRegisterDevice(ArcName, &DiskVtbl); FsRegisterDevice(ArcName, &DiskVtbl);
/* Add partitions */ /* Add partitions */
i = 1; i = FIRST_PARTITION;
DiskReportError(FALSE); DiskReportError(FALSE);
while (DiskGetPartitionEntry(DriveNumber, i, &PartitionTableEntry)) while (DiskGetPartitionEntry(DriveNumber, i, &PartitionTableEntry))
{ {
if (PartitionTableEntry.SystemIndicator != PARTITION_ENTRY_UNUSED) if (PartitionTableEntry.SystemIndicator != PARTITION_ENTRY_UNUSED)
{ {
sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(%lu)", DriveNumber - 0x80, i); sprintf(ArcName, "multi(0)disk(0)rdisk(%u)partition(%lu)", DriveNumber - FIRST_BIOS_DISK, i);
FsRegisterDevice(ArcName, &DiskVtbl); FsRegisterDevice(ArcName, &DiskVtbl);
} }
i++; i++;
@ -350,7 +353,7 @@ EnumerateHarddisks(OUT PBOOLEAN BootDriveReported)
/* Count the number of visible harddisk drives */ /* Count the number of visible harddisk drives */
DiskReportError(FALSE); DiskReportError(FALSE);
DiskCount = 0; DiskCount = 0;
DriveNumber = 0x80; DriveNumber = FIRST_BIOS_DISK;
ASSERT(DiskReadBufferSize > 0); ASSERT(DiskReadBufferSize > 0);
@ -432,7 +435,7 @@ DiskGetBootPath(BOOLEAN IsPxe)
// RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath), "ramdisk(%u)", 0); // RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath), "ramdisk(%u)", 0);
RtlStringCbCopyA(FrLdrBootPath, sizeof(FrLdrBootPath), "ramdisk(0)"); RtlStringCbCopyA(FrLdrBootPath, sizeof(FrLdrBootPath), "ramdisk(0)");
} }
else if (FrldrBootDrive < 0x80) else if (FrldrBootDrive < FIRST_BIOS_DISK)
{ {
/* This is a floppy */ /* This is a floppy */
RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath), RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath),
@ -442,7 +445,7 @@ DiskGetBootPath(BOOLEAN IsPxe)
{ {
/* Boot Partition 0xFF is the magic value that indicates booting from CD-ROM (see isoboot.S) */ /* Boot Partition 0xFF is the magic value that indicates booting from CD-ROM (see isoboot.S) */
RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath), RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath),
"multi(0)disk(0)cdrom(%u)", FrldrBootDrive - 0x80); "multi(0)disk(0)cdrom(%u)", FrldrBootDrive - FIRST_BIOS_DISK);
} }
else else
{ {
@ -460,7 +463,7 @@ DiskGetBootPath(BOOLEAN IsPxe)
RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath), RtlStringCbPrintfA(FrLdrBootPath, sizeof(FrLdrBootPath),
"multi(0)disk(0)rdisk(%u)partition(%lu)", "multi(0)disk(0)rdisk(%u)partition(%lu)",
FrldrBootDrive - 0x80, FrldrBootPartition); FrldrBootDrive - FIRST_BIOS_DISK, FrldrBootPartition);
} }
return TRUE; return TRUE;
@ -479,7 +482,7 @@ PcInitializeBootDevices(VOID)
DiskGetBootPath(PxeInit()); DiskGetBootPath(PxeInit());
/* Add it, if it's a floppy or cdrom */ /* Add it, if it's a floppy or cdrom */
if ((FrldrBootDrive >= 0x80 && !BootDriveReported) || if ((FrldrBootDrive >= FIRST_BIOS_DISK && !BootDriveReported) ||
DiskIsDriveRemovable(FrldrBootDrive)) DiskIsDriveRemovable(FrldrBootDrive))
{ {
/* TODO: Check if it's really a CDROM drive */ /* TODO: Check if it's really a CDROM drive */