2020-10-22 15:55:30 +02:00
|
|
|
/*
|
|
|
|
* OC.h
|
|
|
|
*
|
|
|
|
* Created on: Oct 21, 2020
|
|
|
|
* Author: jief
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef INCLUDE_OC_H_
|
|
|
|
#define INCLUDE_OC_H_
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
//#include "../../OpenCorePkg/Include/Acidanthera/OpenCore.h"
|
|
|
|
|
|
|
|
#include <Library/OcRtcLib.h>
|
|
|
|
#include <Library/OcOSInfoLib.h>
|
|
|
|
#include <Library/OcVirtualFsLib.h>
|
|
|
|
#include <Library/OcConfigurationLib.h>
|
|
|
|
#include <Library/OcDevicePathLib.h>
|
2021-02-06 18:16:46 +01:00
|
|
|
#include <Library/OcFileLib.h>
|
2021-04-17 13:32:32 +02:00
|
|
|
#include <Library/OcCpuLib.h> // OC_CPU_INFO
|
2021-09-23 12:36:41 +02:00
|
|
|
#include <Library/OcMainLib.h> // OcMiscEarlyInit
|
2020-10-22 15:55:30 +02:00
|
|
|
//#include <Protocol/OcBootstrap.h> // OC_BOOTSTRAP_PROTOCOL
|
2021-01-22 09:35:57 +01:00
|
|
|
#include <Library/OcBootManagementLib/BootManagementInternal.h>
|
2021-09-25 12:02:47 +02:00
|
|
|
#include <Library/OcAfterBootCompatLib/BootCompatInternal.h>
|
2020-10-22 15:55:30 +02:00
|
|
|
|
|
|
|
#include <Guid/AppleApfsInfo.h>
|
|
|
|
|
|
|
|
extern OC_GLOBAL_CONFIG mOpenCoreConfiguration;
|
|
|
|
extern OC_STORAGE_CONTEXT mOpenCoreStorage;
|
2021-04-17 13:32:32 +02:00
|
|
|
extern OC_CPU_INFO mOpenCoreCpuInfo;
|
2020-10-22 15:55:30 +02:00
|
|
|
//extern OC_BOOTSTRAP_PROTOCOL mOpenCoreBootStrap;
|
|
|
|
//extern OC_RSA_PUBLIC_KEY* mOpenCoreVaultKey;
|
|
|
|
//extern EFI_HANDLE mLoadHandle;
|
|
|
|
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
OcKernelFileOpen (
|
|
|
|
IN EFI_FILE_PROTOCOL *This,
|
|
|
|
OUT EFI_FILE_PROTOCOL **NewHandle,
|
|
|
|
IN CHAR16 *FileName,
|
|
|
|
IN UINT64 OpenMode,
|
|
|
|
IN UINT64 Attributes
|
|
|
|
);
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
InternalEfiLoadImage (
|
|
|
|
IN BOOLEAN BootPolicy,
|
|
|
|
IN EFI_HANDLE ParentImageHandle,
|
|
|
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
|
|
|
IN void *SourceBuffer OPTIONAL,
|
|
|
|
IN UINTN SourceSize,
|
|
|
|
OUT EFI_HANDLE *ImageHandle
|
|
|
|
);
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
OcStartImage (
|
|
|
|
IN EFI_HANDLE ImageHandle,
|
|
|
|
OUT UINTN *ExitDataSize,
|
|
|
|
OUT CHAR16 **ExitData OPTIONAL
|
|
|
|
);
|
|
|
|
|
|
|
|
void
|
|
|
|
OcLoadBooterUefiSupport (
|
|
|
|
IN OC_GLOBAL_CONFIG *Config
|
|
|
|
);
|
|
|
|
|
|
|
|
UINT64
|
|
|
|
InternalCalculateARTFrequencyIntel (
|
|
|
|
OUT UINT64 *CPUFrequency,
|
|
|
|
OUT UINT64 *TscAdjustPtr OPTIONAL,
|
|
|
|
IN BOOLEAN Recalculate
|
|
|
|
);
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
ClOcReadConfigurationFile(
|
|
|
|
IN OC_STORAGE_CONTEXT *Storage,
|
|
|
|
IN CONST CHAR16* configPath,
|
|
|
|
OUT OC_GLOBAL_CONFIG *Config
|
|
|
|
);
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
InternalGetApfsSpecialFileInfo (
|
|
|
|
IN EFI_FILE_PROTOCOL *Root,
|
|
|
|
IN OUT APPLE_APFS_VOLUME_INFO **VolumeInfo OPTIONAL,
|
|
|
|
IN OUT APPLE_APFS_CONTAINER_INFO **ContainerInfo OPTIONAL
|
|
|
|
);
|
|
|
|
|
|
|
|
void
|
|
|
|
OcMain (
|
|
|
|
IN OC_STORAGE_CONTEXT *Storage,
|
|
|
|
IN EFI_DEVICE_PATH_PROTOCOL *LoadPath OPTIONAL
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
} // extern "C"
|
|
|
|
#endif
|
|
|
|
|
2021-09-25 12:25:02 +02:00
|
|
|
// This was a macro.
|
|
|
|
// But there is a catch : if parameter value depends on ocString.DynValue, DynValue is wiped before value is evaluated.
|
|
|
|
// Solution could have been an intermediary variable.
|
|
|
|
inline void OC_DATA_ASSIGN_N(OC_DATA& ocString, const unsigned char* value, size_t len) {
|
|
|
|
if( len >= sizeof(ocString.Value) ) {
|
|
|
|
memset(ocString.Value, 0, sizeof(ocString.Value));
|
|
|
|
ocString.DynValue = (__typeof__(ocString.DynValue))malloc(len);
|
|
|
|
memcpy(ocString.DynValue, value, len);
|
|
|
|
ocString.MaxSize = (UINT32)len;
|
|
|
|
ocString.Size = (UINT32)len; /* unsafe cast */
|
|
|
|
}else{
|
|
|
|
ocString.DynValue = NULL;
|
|
|
|
memcpy(ocString.Value, value, len);
|
|
|
|
ocString.MaxSize = sizeof(ocString.Value);
|
|
|
|
ocString.Size = (UINT32)len; /* unsafe cast */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// This was a macro.
|
|
|
|
// But there is a catch : if parameter value depends on ocString.DynValue, DynValue is wiped before value is evaluated.
|
|
|
|
// Solution could have been an intermediary variable.
|
|
|
|
inline void OC_STRING_ASSIGN_N(OC_STRING& ocString, const char* value, size_t len) {
|
|
|
|
if( len >= sizeof(ocString.Value) ) {
|
|
|
|
memset(ocString.Value, 0, sizeof(ocString.Value));
|
|
|
|
ocString.DynValue = (__typeof__(ocString.DynValue))malloc(len);
|
|
|
|
memcpy(ocString.DynValue, value, len);
|
|
|
|
ocString.MaxSize = (UINT32)len;
|
|
|
|
ocString.Size = (UINT32)len; /* unsafe cast */
|
|
|
|
}else{
|
|
|
|
ocString.DynValue = NULL;
|
|
|
|
memcpy(ocString.Value, value, len);
|
|
|
|
ocString.MaxSize = sizeof(ocString.Value);
|
|
|
|
ocString.Size = (UINT32)len; /* unsafe cast */
|
|
|
|
}
|
|
|
|
}
|
2020-10-22 15:55:30 +02:00
|
|
|
|
|
|
|
#define OC_STRING_ASSIGN(ocString, value) OC_STRING_ASSIGN_N(ocString, value, strlen(value)+1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* INCLUDE_OC_H_ */
|