15#define TAG_HW_RESOURCE_LIST 'lRwH'
16#define TAG_HW_DISK_CONTEXT 'cDwH'
17#define FIRST_BIOS_DISK 0x80
18#define FIRST_PARTITION 1
52static const CHAR Hex[] =
"0123456789abcdef";
69 TRACE(
"GetHarddiskIdentifier: DriveNumber: %d\n", DriveNumber);
97 if (PartitionNum == 0)
99 TRACE(
"Boot PartitionNumber is 0\n");
104 *BootPartition = PartitionNum;
105 TRACE(
"UefiGetBootPartitionEntry: Boot Partition is: %d\n", PartitionNum);
147 ULONG UefiDriveNumber = 0;
150 TRACE(
"UefiDiskOpen: File ID: %d, Path: %s\n", FileId,
Path);
154 ERR(
"DiskOpen(): DiskReadBufferSize is 0, something is wrong.\n");
162 TRACE(
"Opening disk: DriveNumber: %d, DrivePartition: %d\n", DriveNumber, DrivePartition);
167 if (DrivePartition != 0xff && DrivePartition != 0)
183 ERR(
"SectorSize (%lu) != Geometry.BytesPerSector (%lu), expect problems!\n",
195 Context->DriveNumber = DriveNumber;
210 ULONG Length, TotalSectors, MaxSectors, ReadSectors;
228 ReadSectors =
min(TotalSectors, MaxSectors);
245 TotalSectors -= ReadSectors;
316 ERR(
"Reading MBR failed\n");
330 for (
i = 0;
i < 512 /
sizeof(
ULONG);
i++)
334 Checksum = ~Checksum + 1;
335 TRACE(
"Checksum: %x\n", Checksum);
380 Identifier[18] = (ValidPartitionTable ?
'A' :
'X');
389 ULONG BlockDeviceIndex;
390 ULONG SystemHandleCount;
394 UINTN handle_size = 0;
402 SystemHandleCount = handle_size /
sizeof(
EFI_HANDLE);
405 BlockDeviceIndex = 0;
407 for (
i = 0;
i < SystemHandleCount; ++
i)
420 TRACE(
"UefiSetupBlockDevices: UEFI has found a block device that failed, skipping\n");
425 TRACE(
"Found root of a HDD\n");
438 for (increment =
OffsetToBoot; increment > 0; increment--)
443 TRACE(
"Found root at increment %u\n", increment);
453 TRACE(
"Found Boot drive\n");
468 TRACE(
"UefiSetBootpath: Setting up boot path\n");
486 ERR(
"Failed to get boot partition entry\n");
491 "multi(0)disk(0)rdisk(%u)partition(%lu)",
520 ERR(
"Reading MBR failed\n");
531 for (
i = 0;
i < 2048 /
sizeof(
ULONG);
i++)
535 Checksum = ~Checksum + 1;
536 TRACE(
"Checksum: %x\n", Checksum);
562 ULONG UefiDriveNumber;
565 TRACE(
"UefiDiskReadLogicalSectors: DriveNumber: %d\n", UefiDriveNumber);
576 ULONG UefiDriveNumber;
593 TRACE(
"UefiDiskGetCacheableBlockCount: DriveNumber: %d\n", UefiDriveNumber);
#define BLOCK_IO_PROTOCOL
PRTL_UNICODE_STRING_BUFFER Path
VOID AddReactOSArcDiskInfo(IN PSTR ArcName, IN ULONG Signature, IN ULONG Checksum, IN BOOLEAN ValidPartitionTable)
BOOLEAN DissectArcPath(IN PCSTR ArcPath, OUT PCSTR *Path OPTIONAL, OUT PUCHAR DriveNumber, OUT PULONG PartitionNumber)
BOOLEAN DiskGetPartitionEntry(IN UCHAR DriveNumber, IN ULONG PartitionNumber, OUT PPARTITION_TABLE_ENTRY PartitionTableEntry)
VOID DiskDetectPartitionType(IN UCHAR DriveNumber)
#define DBG_DEFAULT_CHANNEL(ch)
#define PARTITION_ENTRY_UNUSED
struct _MASTER_BOOT_RECORD * PMASTER_BOOT_RECORD
PVOID FsGetDeviceSpecific(ULONG FileId)
VOID FsSetDeviceSpecific(ULONG FileId, PVOID Specific)
VOID FsRegisterDevice(_In_ PCSTR DeviceName, _In_ const DEVVTBL *FuncTable)
#define MachDiskGetDriveGeometry(Drive, Geom)
#define MachDiskReadLogicalSectors(Drive, Start, Count, Buf)
PVOID MmAllocateMemoryWithType(SIZE_T MemorySize, TYPE_OF_MEMORY MemoryType)
FORCEINLINE PVOID FrLdrTempAlloc(_In_ SIZE_T Size, _In_ ULONG Tag)
FORCEINLINE VOID FrLdrTempFree(PVOID Allocation, ULONG Tag)
static const WCHAR Signature[]
CCHAR FrLdrBootPath[MAX_PATH]
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define sprintf(buf, format,...)
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
@ LoaderFirmwareTemporary
EFI_LOCATE_HANDLE LocateHandle
EFI_HANDLE_PROTOCOL HandleProtocol
EFI_BOOT_SERVICES * BootServices
ULONG PartitionSectorCount
ULONG SectorCountBeforePartition
EFI_BLOCK_IO_MEDIA * Media
EFI_BLOCK_READ ReadBlocks
ULONG BytesPerSector
Number of bytes per sector.
ULONG Cylinders
Number of cylinders on the disk.
ULONGLONG Sectors
Total number of disk sectors/LBA blocks.
ULONG SectorsPerTrack
Number of sectors per track.
ULONG Heads
Number of heads on the disk.
BOOLEAN IsThisTheBootDrive
USHORT MasterBootRecordMagic
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
static ULONG PublicBootArcDisk
static EFI_BLOCK_IO * bio
BOOLEAN UefiDiskGetDriveGeometry(UCHAR DriveNumber, PGEOMETRY Geometry)
#define TAG_HW_DISK_CONTEXT
static BOOLEAN UefiGetBootPartitionEntry(IN UCHAR DriveNumber, OUT PPARTITION_TABLE_ENTRY PartitionTableEntry, OUT PULONG BootPartition)
BOOLEAN UefiDiskReadLogicalSectors(IN UCHAR DriveNumber, IN ULONGLONG SectorNumber, IN ULONG SectorCount, OUT PVOID Buffer)
struct tagDISKCONTEXT DISKCONTEXT
static CHAR PcDiskIdentifier[32][20]
BOOLEAN UefiInitializeBootDevices(VOID)
static ARC_STATUS UefiDiskGetFileInformation(ULONG FileId, FILEINFORMATION *Information)
static ULONG UefiBootRootIdentifier
EFI_HANDLE PublicBootHandle
EFI_SYSTEM_TABLE * GlobalSystemTable
LONG DiskReportError(BOOLEAN bShowError)
static const DEVVTBL UefiDiskVtbl
static VOID UefiSetupBlockDevices(VOID)
static ARC_STATUS UefiDiskOpen(CHAR *Path, OPENMODE OpenMode, ULONG *FileId)
static ARC_STATUS UefiDiskSeek(ULONG FileId, LARGE_INTEGER *Position, SEEKMODE SeekMode)
static INTERNAL_UEFI_DISK * InternalUefiDisk
static ARC_STATUS UefiDiskClose(ULONG FileId)
static VOID GetHarddiskInformation(UCHAR DriveNumber)
PCHAR GetHarddiskIdentifier(UCHAR DriveNumber)
static ARC_STATUS UefiDiskRead(ULONG FileId, VOID *Buffer, ULONG N, ULONG *Count)
EFI_HANDLE GlobalImageHandle
struct _INTERNAL_UEFI_DISK INTERNAL_UEFI_DISK
static ULONG OffsetToBoot
static EFI_HANDLE * handles
UCHAR UefiGetFloppyCount(VOID)
SIZE_T DiskReadBufferSize
ULONG UefiDiskGetCacheableBlockCount(UCHAR DriveNumber)
static BOOLEAN UefiSetBootpath(VOID)
struct _INTERNAL_UEFI_DISK * PINTERNAL_UEFI_DISK
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information