Skip to content

Commit d471844

Browse files
committed
Roll APFS VolumeGroup ID Back
Closes #93
1 parent 8ceff5e commit d471844

9 files changed

Lines changed: 245 additions & 157 deletions

File tree

BootMaster/apple.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ EFI_STATUS RP_GetApfsSpecialFileInfo (
566566
*VolumeInfo = RP_GetFileInfo (
567567
Root,
568568
&AppleApfsVolumeInfoGuid,
569-
sizeof (**VolumeInfo) - sizeof((*VolumeInfo)->VolGroupGuid),
569+
sizeof (**VolumeInfo),
570570
NULL
571571
);
572572

@@ -645,20 +645,15 @@ EFI_STATUS RP_GetApfsVolumeInfo (
645645
IN EFI_HANDLE Device,
646646
OUT EFI_GUID *ContainerGuid OPTIONAL,
647647
OUT EFI_GUID *VolumeGuid OPTIONAL,
648-
OUT APPLE_APFS_VOLUME_ROLE *VolumeRole OPTIONAL,
649-
OUT EFI_GUID *ApfsGroupGuid OPTIONAL
648+
OUT APPLE_APFS_VOLUME_ROLE *VolumeRole OPTIONAL
650649
) {
651650
EFI_STATUS Status;
652651
EFI_FILE_PROTOCOL *Root;
653652
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem;
654653
APPLE_APFS_CONTAINER_INFO *ApfsContainerInfo;
655654
APPLE_APFS_VOLUME_INFO *ApfsVolumeInfo;
656655

657-
if (ContainerGuid == NULL &&
658-
VolumeGuid == NULL &&
659-
VolumeRole == NULL &&
660-
ApfsGroupGuid == NULL
661-
) {
656+
if (ContainerGuid == NULL && VolumeGuid == NULL && VolumeRole == NULL) {
662657
return EFI_INVALID_PARAMETER;
663658
}
664659

BootMaster/apple.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ struct APPLE_FRAMEBUFFER_INFO_PROTOCOL_ {
7171
0x3533CF0D, 0x685F, 0x5EBF, {0x8D, 0xC6, 0x73, 0x93, 0x48, 0x5B, 0xAF, 0xA2} \
7272
}
7373
typedef struct {
74-
UINT32 Version; // always 1
74+
UINT32 Always1;
7575
EFI_GUID Uuid;
7676
} APPLE_APFS_CONTAINER_INFO;
7777

@@ -92,10 +92,9 @@ typedef UINT32 APPLE_APFS_VOLUME_ROLE;
9292
0x900C7693, 0x8C14, 0x58BA, {0xB4, 0x4E, 0x97, 0x45, 0x15, 0xD2, 0x7C, 0x78} \
9393
}
9494
typedef struct {
95-
UINT32 Version; // 2 includes VolumeGroup GUID
95+
UINT32 Always1;
9696
EFI_GUID Uuid;
9797
APPLE_APFS_VOLUME_ROLE Role;
98-
EFI_GUID VolGroupGuid;
9998
} APPLE_APFS_VOLUME_INFO;
10099

101100

@@ -105,8 +104,7 @@ EFI_STATUS RP_GetApfsVolumeInfo (
105104
IN EFI_HANDLE Device,
106105
OUT EFI_GUID *ContainerGuid OPTIONAL,
107106
OUT EFI_GUID *VolumeGuid OPTIONAL,
108-
OUT APPLE_APFS_VOLUME_ROLE *VolumeRole OPTIONAL,
109-
OUT EFI_GUID *ApfsGroupGuid OPTIONAL
107+
OUT APPLE_APFS_VOLUME_ROLE *VolumeRole OPTIONAL
110108
);
111109
CHAR16 * RP_GetAppleDiskLabel (
112110
IN REFIT_VOLUME *Volume
@@ -117,6 +115,8 @@ CHAR16 * RP_GetAppleDiskLabel (
117115
#endif // APPLE_APFS_INFO_H
118116

119117

118+
119+
120120
// Apple's GUID
121121
#define APPLE_GUID \
122122
{ \

BootMaster/global.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,6 @@ typedef struct {
332332
EFI_GUID VolUuid;
333333
EFI_GUID PartGuid;
334334
EFI_GUID PartTypeGuid;
335-
EFI_GUID VolGroup;
336-
UINT32 Role; // APPLE_APFS_VOLUME_ROLE
337335
BOOLEAN IsMarkedReadOnly;
338336
EG_IMAGE *VolIconImage;
339337
EG_IMAGE *VolBadgeImage;

BootMaster/lib.c

Lines changed: 55 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2078,10 +2078,6 @@ VOID ScanExtendedPartition (
20782078
// Check for Multi-Instance APFS Containers
20792079
static
20802080
VOID VetMultiInstanceAPFS (VOID) {
2081-
// DA-TAG: Disable as redundant since we now have APFS Volume Group GUID
2082-
// Keep function as potentially useful for future other APFS items
2083-
return;
2084-
#if 0
20852081
EFI_STATUS Status;
20862082
UINTN i, j;
20872083
BOOLEAN ActiveContainer;
@@ -2142,7 +2138,7 @@ return;
21422138
Status = RP_GetApfsVolumeInfo (
21432139
Volumes[i]->DeviceHandle,
21442140
NULL, NULL,
2145-
&VolumeRole, NULL
2141+
&VolumeRole
21462142
);
21472143

21482144
if (!EFI_ERROR(Status)) {
@@ -2178,9 +2174,6 @@ return;
21782174
break;
21792175
}
21802176
} // for j = 0
2181-
2182-
// DA-TAG: Disable - END
2183-
#endif
21842177
} // VOID VetMultiInstanceAPFS()
21852178

21862179
// Ensure SyncAPFS can be used.
@@ -2207,7 +2200,9 @@ VOID VetSyncAPFS (VOID) {
22072200
#endif
22082201
}
22092202
else {
2210-
UINTN i, j;
2203+
UINTN i, j;
2204+
CHAR16 *CheckName = NULL;
2205+
CHAR16 *TweakName = NULL;
22112206

22122207
#if REFIT_DEBUG > 0
22132208
MsgStr = StrDuplicate (L"ReMap APFS Volumes");
@@ -2226,17 +2221,43 @@ VOID VetSyncAPFS (VOID) {
22262221

22272222
// Filter '- Data' string tag out of Volume Group name if present
22282223
for (i = 0; i < DataVolumesCount; i++) {
2229-
for (j = 0; j < SystemVolumesCount; j++) {
2230-
if (GuidsAreEqual (&DataVolumes[i]->VolGroup, &SystemVolumes[j]->VolGroup)) {
2231-
DataVolumes[i]->VolName = StrDuplicate (SystemVolumes[j]->VolName);
2232-
break;
2233-
}
2234-
} // for j = 0
2224+
if (MyStrStr (DataVolumes[i]->VolName, L"- Data")) {
2225+
for (j = 0; j < SystemVolumesCount; j++) {
2226+
MY_FREE_POOL(TweakName);
2227+
TweakName = SanitiseString (SystemVolumes[j]->VolName);
2228+
2229+
MY_FREE_POOL(CheckName);
2230+
CheckName = PoolPrint (L"%s - Data", TweakName);
2231+
2232+
if (MyStriCmp (DataVolumes[i]->VolName, CheckName)) {
2233+
MY_FREE_POOL(DataVolumes[i]->VolName);
2234+
DataVolumes[i]->VolName = StrDuplicate (SystemVolumes[j]->VolName);
2235+
2236+
break;
2237+
}
2238+
2239+
// Check against raw name string if apporpriate
2240+
if (!MyStriCmp (SystemVolumes[j]->VolName, TweakName)) {
2241+
MY_FREE_POOL(CheckName);
2242+
CheckName = PoolPrint (L"%s - Data", SystemVolumes[j]->VolName);
2243+
2244+
if (MyStriCmp (DataVolumes[i]->VolName, CheckName)) {
2245+
MY_FREE_POOL(DataVolumes[i]->VolName);
2246+
DataVolumes[i]->VolName = StrDuplicate (SystemVolumes[j]->VolName);
2247+
2248+
break;
2249+
}
2250+
}
2251+
} // for j = 0
2252+
2253+
MY_FREE_POOL(TweakName);
2254+
MY_FREE_POOL(CheckName);
2255+
}
22352256
} // for i = 0
22362257

22372258
#if REFIT_DEBUG > 0
22382259
MsgStr = PoolPrint (
2239-
L"ReMapped %d APFS Volume Group%s",
2260+
L"ReMapped %d APFS Volume%s",
22402261
SystemVolumesCount, (SystemVolumesCount == 1) ? L"" : L"s"
22412262
);
22422263
LOG(1, LOG_LINE_NORMAL, L"%s", MsgStr);
@@ -2297,7 +2318,6 @@ VOID ScanVolumes (VOID) {
22972318
BOOLEAN DupFlag;
22982319
EFI_GUID *UuidList;
22992320
EFI_GUID VolumeGuid;
2300-
EFI_GUID ApfsVolGrpGuid;
23012321
APPLE_APFS_VOLUME_ROLE VolumeRole = 0;
23022322

23032323
#if REFIT_DEBUG > 0
@@ -2306,15 +2326,13 @@ VOID ScanVolumes (VOID) {
23062326
CHAR16 *PartGUID = NULL;
23072327
CHAR16 *PartTypeGUID = NULL;
23082328
CHAR16 *VolumeUUID = NULL;
2309-
CHAR16 *GruopGUID = NULL;
23102329

23112330
const CHAR16 *ITEMVOLA = L"PARTITION TYPE GUID";
23122331
const CHAR16 *ITEMVOLB = L"PARTITION GUID";
23132332
const CHAR16 *ITEMVOLC = L"PARTITION TYPE";
2314-
const CHAR16 *ITEMVOLD = L"APFS GROUP GUID";
2315-
const CHAR16 *ITEMVOLE = L"VOLUME UUID";
2316-
const CHAR16 *ITEMVOLF = L"VOLUME ROLE";
2317-
const CHAR16 *ITEMVOLG = L"VOLUME NAME";
2333+
const CHAR16 *ITEMVOLD = L"VOLUME UUID";
2334+
const CHAR16 *ITEMVOLE = L"VOLUME ROLE";
2335+
const CHAR16 *ITEMVOLF = L"VOLUME NAME";
23182336

23192337
LOG(1, LOG_LINE_SEPARATOR, L"Scan Readable Volumes");
23202338
#endif
@@ -2505,8 +2523,8 @@ VOID ScanVolumes (VOID) {
25052523

25062524
if (!DoneHeadings) {
25072525
MsgLog (
2508-
"%-41s%-41s%-20s%-41s%-41s%-22s%s\n",
2509-
ITEMVOLA, ITEMVOLB, ITEMVOLC, ITEMVOLD, ITEMVOLE, ITEMVOLF, ITEMVOLG
2526+
"%-41s%-41s%-20s%-41s%-22s%s\n",
2527+
ITEMVOLA, ITEMVOLB, ITEMVOLC, ITEMVOLD, ITEMVOLE, ITEMVOLF
25102528
);
25112529
DoneHeadings = TRUE;
25122530

@@ -2544,18 +2562,15 @@ VOID ScanVolumes (VOID) {
25442562
Volume->DeviceHandle,
25452563
NULL,
25462564
&VolumeGuid,
2547-
&VolumeRole,
2548-
&ApfsVolGrpGuid
2565+
&VolumeRole
25492566
);
25502567
#endif
25512568

25522569
if (!EFI_ERROR(Status)) {
2553-
PartType = L"APFS";
2554-
Volume->FSType = FS_TYPE_APFS;
2555-
Volume->VolUuid = VolumeGuid;
2556-
Volume->VolGroup = ApfsVolGrpGuid;
2557-
Volume->Role = VolumeRole;
2558-
RoleStr = GetApfsRoleString (VolumeRole);
2570+
PartType = L"APFS";
2571+
Volume->FSType = FS_TYPE_APFS;
2572+
Volume->VolUuid = VolumeGuid;
2573+
RoleStr = GetApfsRoleString (VolumeRole);
25592574

25602575
if (VolumeRole == APPLE_APFS_VOLUME_ROLE_RECOVERY) {
25612576
// Create or add to a list of APFS Recovery Volumes
@@ -2596,26 +2611,17 @@ VOID ScanVolumes (VOID) {
25962611

25972612
#if REFIT_DEBUG > 0
25982613
// Allocate Pools for Log Details
2599-
PartName = StrDuplicate (PartType);
2600-
2601-
PartGUID = GuidsAreEqual (&(Volume->PartGuid), &GuidNull)
2602-
? StrDuplicate (L"") : GuidAsString (&(Volume->PartGuid));
2603-
2604-
PartTypeGUID = GuidsAreEqual (&(Volume->PartTypeGuid), &GuidNull)
2605-
? StrDuplicate (L"") : GuidAsString (&(Volume->PartTypeGuid));
2606-
2607-
VolumeUUID = GuidsAreEqual (&(Volume->VolUuid), &GuidNull)
2608-
? StrDuplicate (L"") : GuidAsString (&(Volume->VolUuid));
2609-
2610-
GruopGUID = GuidsAreEqual (&(Volume->VolGroup), &GuidNull)
2611-
? StrDuplicate (L"") : GuidAsString (&(Volume->VolGroup));
2614+
PartName = StrDuplicate (PartType);
2615+
PartGUID = GuidAsString (&(Volume->PartGuid));
2616+
PartTypeGUID = GuidAsString (&(Volume->PartTypeGuid));
2617+
VolumeUUID = GuidAsString (&(Volume->VolUuid));
26122618

26132619
// Control PartName Length
26142620
LimitStringLength (PartName, 15);
26152621

26162622
MsgStr = PoolPrint (
2617-
L"%-36s : %-36s : %-15s : %-36s : %-36s : %-17s : %s",
2618-
PartTypeGUID, PartGUID, PartType, GruopGUID,
2623+
L"%-36s : %-36s : %-15s : %-36s : %-17s : %s",
2624+
PartTypeGUID, PartGUID, PartType,
26192625
VolumeUUID, RoleStr, Volume->VolName
26202626
);
26212627

@@ -2628,7 +2634,6 @@ VOID ScanVolumes (VOID) {
26282634
MY_FREE_POOL(PartGUID);
26292635
MY_FREE_POOL(PartTypeGUID);
26302636
MY_FREE_POOL(VolumeUUID);
2631-
MY_FREE_POOL(GruopGUID);
26322637
#endif
26332638
}
26342639

@@ -2669,8 +2674,8 @@ VOID ScanVolumes (VOID) {
26692674
else {
26702675
#if REFIT_DEBUG > 0
26712676
MsgStr = PoolPrint (
2672-
L"%-41s%-41s%-20s%-41s%-41s%-22s%s",
2673-
ITEMVOLA, ITEMVOLB, ITEMVOLC, ITEMVOLD, ITEMVOLE, ITEMVOLF, ITEMVOLG
2677+
L"%-41s%-41s%-20s%-41s%-22s%s",
2678+
ITEMVOLA, ITEMVOLB, ITEMVOLC, ITEMVOLD, ITEMVOLE, ITEMVOLF
26742679
);
26752680
LOG(1, LOG_LINE_NORMAL, L"%s", MsgStr);
26762681
MsgLog ("%s", OffsetNext);

BootMaster/lib.h

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -134,19 +134,13 @@ VOID ScanVolumes (VOID);
134134
VOID ReinitVolumes (VOID);
135135
VOID UninitRefitLib (VOID);
136136
VOID SetVolumeIcons (VOID);
137-
VOID FreeVolume (REFIT_VOLUME **Volume);
138137
VOID EraseUint32List (IN UINT32_LIST **TheList);
139-
VOID SanitiseVolumeName (REFIT_VOLUME **Volume);
140138
VOID SetVolumeBadgeIcon (IN OUT REFIT_VOLUME *Volume);
141139
VOID CleanUpPathNameSlashes (IN OUT CHAR16 *PathName);
142-
VOID FreeList (
143-
IN OUT VOID ***ListPtr,
144-
IN OUT UINTN *ElementCount
145-
);
146-
VOID FreeVolumes (
147-
IN OUT REFIT_VOLUME ***ListVolumes,
148-
IN OUT UINTN *ListCount
149-
);
140+
VOID FreeList (IN OUT VOID ***ListPtr, IN OUT UINTN *ElementCount);
141+
VOID FreeVolumes (IN OUT REFIT_VOLUME ***ListVolumes, IN OUT UINTN *ListCount);
142+
VOID FreeVolume (REFIT_VOLUME **Volume);
143+
VOID SanitiseVolumeName (REFIT_VOLUME **Volume);
150144
VOID AddListElement (
151145
IN OUT VOID ***ListPtr,
152146
IN OUT UINTN *ElementCount,
@@ -180,16 +174,10 @@ CHAR16 * SplitDeviceString (IN OUT CHAR16 *InString);
180174
BOOLEAN EjectMedia (VOID);
181175
BOOLEAN HasWindowsBiosBootFiles (IN REFIT_VOLUME *Volume);
182176
BOOLEAN GuidsAreEqual (IN EFI_GUID *Guid1, IN EFI_GUID *Guid2);
183-
BOOLEAN FileExists (IN EFI_FILE *BaseDir, IN CHAR16 *RelativePath);
184177
BOOLEAN FindVolume (IN REFIT_VOLUME **Volume, IN CHAR16 *Identifier);
185-
BOOLEAN SplitVolumeAndFilename (
186-
IN OUT CHAR16 **Path,
187-
OUT CHAR16 **VolName
188-
);
189-
BOOLEAN VolumeMatchesDescription (
190-
IN REFIT_VOLUME *Volume,
191-
IN CHAR16 *Description
192-
);
178+
BOOLEAN FileExists (IN EFI_FILE *BaseDir, IN CHAR16 *RelativePath);
179+
BOOLEAN SplitVolumeAndFilename (IN OUT CHAR16 **Path, OUT CHAR16 **VolName);
180+
BOOLEAN VolumeMatchesDescription (IN REFIT_VOLUME *Volume, IN CHAR16 *Description);
193181
BOOLEAN FilenameIn (
194182
IN REFIT_VOLUME *Volume,
195183
IN CHAR16 *Directory,

BootMaster/main.c

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2554,16 +2554,28 @@ EFI_STATUS EFIAPI efi_main (
25542554
}
25552555
else {
25562556
if (GlobalConfig.SyncAPFS && ourLoaderEntry->Volume->FSType == FS_TYPE_APFS) {
2557-
if (GlobalConfig.SyncAPFS
2558-
&& ourLoaderEntry->Volume->FSType == FS_TYPE_APFS
2559-
&& ourLoaderEntry->Volume->Role == APPLE_APFS_VOLUME_ROLE_PREBOOT
2560-
) {
2561-
DisplayName = GetVolumeGroupName (
2562-
ourLoaderEntry->LoaderPath,
2563-
ourLoaderEntry->Volume
2564-
);
2557+
APPLE_APFS_VOLUME_ROLE VolumeRole = 0;
2558+
2559+
// DA-TAG: Limit to TianoCore
2560+
#ifdef __MAKEWITH_GNUEFI
2561+
Status = EFI_NOT_STARTED;
2562+
#else
2563+
Status = RP_GetApfsVolumeInfo (
2564+
ourLoaderEntry->Volume->DeviceHandle,
2565+
NULL, NULL,
2566+
&VolumeRole
2567+
);
2568+
#endif
2569+
2570+
if (!EFI_ERROR(Status)) {
2571+
if (VolumeRole == APPLE_APFS_VOLUME_ROLE_PREBOOT) {
2572+
DisplayName = GetVolumeGroupName (
2573+
ourLoaderEntry->LoaderPath,
2574+
ourLoaderEntry->Volume
2575+
);
2576+
}
25652577
}
2566-
}
2578+
} // if GlobalConfig.SyncAFPS
25672579

25682580
MsgLog (
25692581
" from '%s'",
@@ -2572,7 +2584,6 @@ EFI_STATUS EFIAPI efi_main (
25722584
: ourLoaderEntry->Volume->VolName
25732585
);
25742586
}
2575-
25762587
MY_FREE_POOL(MsgStr);
25772588
MY_FREE_POOL(DisplayName);
25782589
#endif

0 commit comments

Comments
 (0)