mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2025-02-23 02:11:54 +01:00
some more fixes
Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
This commit is contained in:
parent
127b035930
commit
eb26300fd6
1
.gitignore
vendored
1
.gitignore
vendored
@ -28,6 +28,7 @@ toolchain/
|
||||
/CloverPackage/CloverV2/EFI/BOOT/BOOTIA32.efi
|
||||
/CloverPackage/CloverV2/EFI/BOOT/BOOTX64.efi
|
||||
/CloverPackage/CloverV2/EFI/CLOVER/CLOVERX64.efi
|
||||
/CloverPackage/CloverV2/EFI/CLOVER/CLOVERX64-test.efi
|
||||
/CloverPackage/CloverV2/EFI/CLOVER/CLOVERIA32.efi
|
||||
/CloverPackage/CloverV2/EFI/CLOVER/drivers/
|
||||
/CloverPackage/CloverV2/EFI/CLOVER/drivers32/
|
||||
|
@ -40,7 +40,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
@param Size The expected size for the TYPE.
|
||||
|
||||
**/
|
||||
#define VERIFY_SIZE_OF(TYPE, Size) extern UINT8 _VerifySizeof##TYPE[(sizeof(TYPE) == (Size))?1:0 / (sizeof(TYPE) == (Size))?1:0]
|
||||
#define VERIFY_SIZE_OF(TYPE, Size) extern UINT8 _VerifySizeof##TYPE[((sizeof(TYPE) == (Size))?1:0) / ((sizeof(TYPE) == (Size))?1:0)]
|
||||
|
||||
//
|
||||
// Verify that ProcessorBind.h produced UEFI Data Types that are compliant with
|
||||
|
@ -818,10 +818,10 @@ LoadNvramPlist (
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CHAR8 *NvramPtr;
|
||||
UINTN Size;
|
||||
|
||||
CHAR8 *NvramPtr = NULL;
|
||||
UINTN Size = 0;
|
||||
|
||||
DBG(" begin load gNvramDict=0x%x\n", gNvramDict);
|
||||
//
|
||||
// skip loading if already loaded
|
||||
//
|
||||
@ -834,7 +834,7 @@ LoadNvramPlist (
|
||||
//
|
||||
Status = egLoadFile (RootDir, NVRAMPlistPath, (UINT8**)&NvramPtr, &Size);
|
||||
if(EFI_ERROR(Status)) {
|
||||
// DBG (" not present\n");
|
||||
DBG (" not present\n");
|
||||
return Status;
|
||||
}
|
||||
|
||||
@ -848,7 +848,7 @@ LoadNvramPlist (
|
||||
// DBG (" parsing error\n");
|
||||
// }
|
||||
|
||||
FreePool (NvramPtr);
|
||||
FreePool ((VOID*)NvramPtr);
|
||||
// we will leave nvram.plist loaded and parsed for later processing
|
||||
//FreeTag(gNvramDict);
|
||||
|
||||
@ -861,36 +861,35 @@ EFI_STATUS
|
||||
LoadLatestNvramPlist ()
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Index;
|
||||
// UINTN Index;
|
||||
REFIT_VOLUME *Volume;
|
||||
// EFI_GUID *Guid;
|
||||
EFI_FILE_HANDLE FileHandle;
|
||||
EFI_FILE_INFO *FileInfo;
|
||||
EFI_FILE_HANDLE FileHandle = NULL;
|
||||
EFI_FILE_INFO *FileInfo = NULL;
|
||||
UINT64 LastModifTimeMs;
|
||||
UINT64 ModifTimeMs;
|
||||
REFIT_VOLUME *VolumeWithLatestNvramPlist;
|
||||
REFIT_VOLUME *VolumeWithLatestNvramPlist = NULL;
|
||||
|
||||
//there are debug messages not needed for users
|
||||
// DBG ("Searching volumes for latest nvram.plist ...");
|
||||
DBG ("Searching volumes for latest nvram.plist ...");
|
||||
|
||||
//
|
||||
// skip loading if already loaded
|
||||
//
|
||||
if (gNvramDict != NULL) {
|
||||
// DBG (" already loaded\n");
|
||||
DBG (" already loaded\n");
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
// DBG ("\n");
|
||||
DBG ("\n");
|
||||
|
||||
//
|
||||
// find latest nvram.plist
|
||||
//
|
||||
|
||||
LastModifTimeMs = 0;
|
||||
VolumeWithLatestNvramPlist = NULL;
|
||||
|
||||
|
||||
// search all volumes
|
||||
for (Index = 0; Index < VolumesCount; ++Index) {
|
||||
for (UINTN Index = 0; Index < VolumesCount; ++Index) {
|
||||
Volume = Volumes[Index];
|
||||
|
||||
if (!Volume->RootDir) {
|
||||
@ -904,14 +903,14 @@ LoadLatestNvramPlist ()
|
||||
// not a GUID partition
|
||||
DBG (" - not GPT");
|
||||
} */
|
||||
|
||||
// DBG("Volume[%d]\n", Index);
|
||||
// check if nvram.plist exists
|
||||
Status = Volume->RootDir->Open (Volume->RootDir, &FileHandle, L"nvram.plist", EFI_FILE_MODE_READ, 0);
|
||||
if (EFI_ERROR(Status)) {
|
||||
// DBG (" - no nvram.plist - skipping!\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
// DBG(" Status=%r\n", Status);
|
||||
if (GlobalConfig.FastBoot) {
|
||||
VolumeWithLatestNvramPlist = Volume;
|
||||
break;
|
||||
@ -919,6 +918,7 @@ LoadLatestNvramPlist ()
|
||||
|
||||
// get nvram.plist modification date
|
||||
FileInfo = EfiLibFileInfo(FileHandle);
|
||||
// DBG("got FileInfo=0x%x\n", FileInfo);
|
||||
if (FileInfo == NULL) {
|
||||
// DBG (" - no nvram.plist file info - skipping!\n");
|
||||
FileHandle->Close(FileHandle);
|
||||
@ -926,8 +926,8 @@ LoadLatestNvramPlist ()
|
||||
}
|
||||
|
||||
// DBG (" Modified = ");
|
||||
ModifTimeMs = GetEfiTimeInMs (&FileInfo->ModificationTime);
|
||||
/* DBG ("%d-%d-%d %d:%d:%d (%ld ms)",
|
||||
ModifTimeMs = GetEfiTimeInMs (&(FileInfo->ModificationTime));
|
||||
/* DBG ("%d-%d-%d %d:%d:%d (%ld ms)\n",
|
||||
FileInfo->ModificationTime.Year, FileInfo->ModificationTime.Month, FileInfo->ModificationTime.Day,
|
||||
FileInfo->ModificationTime.Hour, FileInfo->ModificationTime.Minute, FileInfo->ModificationTime.Second,
|
||||
ModifTimeMs); */
|
||||
@ -956,7 +956,7 @@ LoadLatestNvramPlist ()
|
||||
} else {
|
||||
// DBG (" nvram.plist not found!\n");
|
||||
}
|
||||
|
||||
DBG("loaded Status=%r\n", Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -703,10 +703,10 @@ static VOID ScanVolumeBootcode(IN OUT REFIT_VOLUME *Volume, OUT BOOLEAN *Bootabl
|
||||
Volume->LegacyOS->Name ? Volume->LegacyOS->Name: L"unknown",
|
||||
Volume->LegacyOS->IconName ? Volume->LegacyOS->IconName: L"legacy");
|
||||
#endif
|
||||
|
||||
|
||||
if (FindMem(SectorBuffer, 512, "Non-system disk", 15) >= 0) // dummy FAT boot sector
|
||||
Volume->HasBootCode = FALSE;
|
||||
|
||||
|
||||
// check for MBR partition table
|
||||
/*
|
||||
// apianti - this is littered with bugs and probably not needed lol
|
||||
@ -727,7 +727,9 @@ static VOID ScanVolumeBootcode(IN OUT REFIT_VOLUME *Volume, OUT BOOLEAN *Bootabl
|
||||
}
|
||||
// */
|
||||
}
|
||||
gBS->FreePages((EFI_PHYSICAL_ADDRESS)(UINTN)SectorBuffer, 1);
|
||||
// gBS->FreePages((EFI_PHYSICAL_ADDRESS)(UINTN)SectorBuffer, 1);
|
||||
// FreeAlignedPages((EFI_PHYSICAL_ADDRESS)(UINTN)SectorBuffer, 1);
|
||||
FreeAlignedPages((VOID*)SectorBuffer, EFI_SIZE_TO_PAGES (2048));
|
||||
}
|
||||
|
||||
//at start we have only Volume->DeviceHandle
|
||||
@ -773,7 +775,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
Status = gBS->HandleProtocol(Volume->DeviceHandle, &gEfiBlockIoProtocolGuid, (VOID **) &(Volume->BlockIO));
|
||||
if (EFI_ERROR(Status)) {
|
||||
Volume->BlockIO = NULL;
|
||||
DBG(" Warning: Can't get BlockIO protocol.\n");
|
||||
// DBG(" Warning: Can't get BlockIO protocol.\n");
|
||||
// WaitForSingleEvent (gST->ConIn->WaitForKey, 0);
|
||||
// gST->ConIn->ReadKeyStroke (gST->ConIn, &Key);
|
||||
|
||||
@ -782,7 +784,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
|
||||
Bootable = FALSE;
|
||||
if (Volume->BlockIO->Media->BlockSize == 2048){
|
||||
DBG(" Found optical drive\n");
|
||||
// DBG(" Found optical drive\n");
|
||||
Volume->DiskKind = DISK_KIND_OPTICAL;
|
||||
Volume->BlockIOOffset = 0x10; // offset already applied for FS but not for blockio
|
||||
ScanVolumeBootcode(Volume, &Bootable);
|
||||
@ -791,7 +793,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
Volume->BlockIOOffset = 0;
|
||||
// scan for bootcode and MBR table
|
||||
ScanVolumeBootcode(Volume, &Bootable);
|
||||
// DBG(" ScanVolumeBootcode success\n");
|
||||
// DBG(" ScanVolumeBootcode success\n");
|
||||
// detect device type
|
||||
DevicePath = DuplicateDevicePath(Volume->DevicePath);
|
||||
while (DevicePath != NULL && !IsDevicePathEndType(DevicePath)) {
|
||||
@ -801,13 +803,13 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
((DevicePathSubType (DevicePath) == MSG_SATA_DP) ||
|
||||
(DevicePathSubType (DevicePath) == MSG_NVME_NAMESPACE_DP) ||
|
||||
(DevicePathSubType (DevicePath) == MSG_ATAPI_DP))) {
|
||||
// DBG(" HDD volume\n");
|
||||
// DBG(" HDD volume\n");
|
||||
Volume->DiskKind = DISK_KIND_INTERNAL;
|
||||
break;
|
||||
}
|
||||
if (DevicePathType(DevicePath) == MESSAGING_DEVICE_PATH &&
|
||||
(DevicePathSubType(DevicePath) == MSG_USB_DP || DevicePathSubType(DevicePath) == MSG_USB_CLASS_DP)) {
|
||||
DBG(" USB volume\n");
|
||||
// DBG(" USB volume\n");
|
||||
Volume->DiskKind = DISK_KIND_EXTERNAL;
|
||||
// break;
|
||||
}
|
||||
@ -828,7 +830,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
// VENDOR Specific Path
|
||||
if (DevicePathType(DevicePath) == MEDIA_DEVICE_PATH &&
|
||||
DevicePathSubType(DevicePath) == MEDIA_VENDOR_DP) {
|
||||
// DBG(" Vendor volume\n");
|
||||
// DBG(" Vendor volume\n");
|
||||
Volume->DiskKind = DISK_KIND_NODISK;
|
||||
break;
|
||||
}
|
||||
@ -842,7 +844,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
// LEGACY HARDDISK
|
||||
if (DevicePathType(DevicePath) == BBS_DEVICE_PATH &&
|
||||
(DevicePathSubType(DevicePath) == BBS_BBS_DP || DevicePathSubType(DevicePath) == BBS_TYPE_HARDDRIVE)) {
|
||||
// DBG(" Legacy HDD volume\n");
|
||||
// DBG(" Legacy HDD volume\n");
|
||||
Volume->DiskKind = DISK_KIND_INTERNAL;
|
||||
break;
|
||||
}
|
||||
@ -882,7 +884,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
}
|
||||
DevicePath = NextDevicePathNode (DevicePath);
|
||||
}
|
||||
// DBG("DevicePath scanned\n");
|
||||
// DBG("DevicePath scanned\n");
|
||||
if (HdPath) {
|
||||
// Print(L"Partition found %s\n", DevicePathToStr((EFI_DEVICE_PATH *)HdPath));
|
||||
|
||||
@ -895,7 +897,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
CopyMem(DiskDevicePath, Volume->DevicePath, PartialLength);
|
||||
CopyMem((UINT8 *)DiskDevicePath + PartialLength, DevicePath, sizeof(EFI_DEVICE_PATH)); //EndDevicePath
|
||||
// Print(L"WholeDevicePath %s\n", DevicePathToStr(DiskDevicePath));
|
||||
// DBG("WholeDevicePath %s\n", DevicePathToStr(DiskDevicePath));
|
||||
// DBG("WholeDevicePath %s\n", DevicePathToStr(DiskDevicePath));
|
||||
RemainingDevicePath = DiskDevicePath;
|
||||
Status = gBS->LocateDevicePath(&gEfiDevicePathProtocolGuid, &RemainingDevicePath, &WholeDiskHandle);
|
||||
if (EFI_ERROR(Status)) {
|
||||
@ -913,7 +915,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
|
||||
} else {
|
||||
Volume->WholeDiskBlockIO = NULL;
|
||||
DBG("no WholeDiskBlockIO: %r\n", Status);
|
||||
// DBG("no WholeDiskBlockIO: %r\n", Status);
|
||||
|
||||
//CheckError(Status, L"from HandleProtocol");
|
||||
}
|
||||
@ -1012,7 +1014,7 @@ static EFI_STATUS ScanVolume(IN OUT REFIT_VOLUME *Volume)
|
||||
{
|
||||
VOID *Instance;
|
||||
if (!EFI_ERROR (gBS->HandleProtocol(Volume->DeviceHandle, &gEfiPartTypeSystemPartGuid, &Instance))) {
|
||||
Volume->VolName = L"EFI"; \
|
||||
Volume->VolName = EfiStrDuplicate(L"EFI"); \
|
||||
}
|
||||
}
|
||||
if (!Volume->VolName) {
|
||||
|
Loading…
Reference in New Issue
Block a user