some more fixes

Signed-off-by: Sergey Isakov <isakov-sl@bk.ru>
This commit is contained in:
Sergey Isakov 2020-02-21 06:54:01 +03:00
parent 127b035930
commit eb26300fd6
4 changed files with 38 additions and 35 deletions

1
.gitignore vendored
View File

@ -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/

View File

@ -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

View File

@ -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;
}

View File

@ -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) {