ReactOS 0.4.16-dev-2610-ge2c92c0
part_brfr.c
Go to the documentation of this file.
1/*
2 * PROJECT: FreeLoader
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Xbox (BRFR) partitioning scheme support
5 * COPYRIGHT: Copyright 2004 Gé van Geldorp <gvg@reactos.org>
6 * Copyright 2019 Stanislav Motylkov <x86corez@gmail.com>
7 */
8
9#ifndef _M_ARM
10// #include <freeldr.h>
11
12/* BRFR signature at disk offset 0x600 (== 3 * 0x200) */
13#define XBOX_SIGNATURE_SECTOR 3
14#define XBOX_SIGNATURE ('B' | ('R' << 8) | ('F' << 16) | ('R' << 24))
15
16/* Default hardcoded partition number to boot from Xbox disk */
17#define FATX_DATA_PARTITION 1
18
19static struct
20{
25{
26 /* This is in the \Device\Harddisk0\Partition.. order used by the Xbox kernel */
27 { 0x0055F400, 0x0098F800, PARTITION_FAT32 }, /* Store , E: */
28 { 0x00465400, 0x000FA000, PARTITION_FAT_16 }, /* System, C: */
29 { 0x00000400, 0x00177000, PARTITION_FAT_16 }, /* Cache1, X: */
30 { 0x00177400, 0x00177000, PARTITION_FAT_16 }, /* Cache2, Y: */
31 { 0x002EE400, 0x00177000, PARTITION_FAT_16 } /* Cache3, Z: */
32};
33
34static BOOLEAN
36 _In_ UCHAR DriveNumber)
37{
38 /* Read the Xbox-specific sector */
40 return FALSE; /* Partition does not exist */
41
42 /* Verify the magic Xbox signature */
43 return (*((PULONG)DiskReadBuffer) == XBOX_SIGNATURE);
44}
45
48 _In_ UCHAR DriveNumber,
51 _Out_ PPARTITION_INFORMATION PartitionEntry)
52{
53 ASSERT(SectorSize >= 512);
54
55 if (!DiskIsBrfr(DriveNumber))
56 return FALSE; /* No magic Xbox partitions */
57
58 /* Get partition entry of an Xbox-standard BRFR partitioned disk */
60 return FALSE; /* Partition does not exist */
61
62 /* Convert to standard-style entry */
63 PartitionEntry->StartingOffset.QuadPart = (ULONGLONG)XboxPartitions[PartitionNumber - 1].SectorStart * SectorSize;
64 PartitionEntry->PartitionLength.QuadPart = (ULONGLONG)XboxPartitions[PartitionNumber - 1].SectorCount * SectorSize;
65 PartitionEntry->HiddenSectors = 0;
66 PartitionEntry->PartitionNumber = PartitionNumber;
67 PartitionEntry->PartitionType = XboxPartitions[PartitionNumber - 1].PartitionType;
68 PartitionEntry->BootIndicator = (PartitionNumber == FATX_DATA_PARTITION);
69 PartitionEntry->RecognizedPartition = TRUE;
70 PartitionEntry->RewritePartition = FALSE;
71
72 return TRUE;
73}
74
75#endif
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
unsigned char BOOLEAN
Definition: actypes.h:127
#define DiskReadBuffer
Definition: hardware.h:33
#define MachDiskReadLogicalSectors(Drive, Start, Count, Buf)
Definition: machine.h:120
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ASSERT(a)
Definition: mode.c:44
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define XBOX_SIGNATURE_SECTOR
Definition: part_brfr.c:13
static BOOLEAN DiskIsBrfr(_In_ UCHAR DriveNumber)
Definition: part_brfr.c:35
#define FATX_DATA_PARTITION
Definition: part_brfr.c:17
ULONG SectorStart
Definition: part_brfr.c:21
#define XBOX_SIGNATURE
Definition: part_brfr.c:14
UCHAR PartitionType
Definition: part_brfr.c:23
ULONG SectorCount
Definition: part_brfr.c:22
static struct @142 XboxPartitions[]
BOOLEAN DiskGetBrfrPartitionEntry(_In_ UCHAR DriveNumber, _In_ ULONG SectorSize, _In_ ULONG PartitionNumber, _Out_ PPARTITION_INFORMATION PartitionEntry)
Definition: part_brfr.c:47
#define PARTITION_FAT32
Definition: part_mbr.h:59
#define PARTITION_FAT_16
Definition: part_mbr.h:54
uint32_t * PULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
_In_ ULONG SectorSize
Definition: halfuncs.h:291
_In_ ULONG _In_ ULONG PartitionNumber
Definition: iofuncs.h:2061