CloverBootloader/MemoryFix/AptioMemoryFix/Config.h

124 lines
4.5 KiB
C

/**
Hack configuration
This is a gestalt of black art, do not edit.
by vit9696
**/
#ifndef APTIOFIX_HACK_CONFIG_H
#define APTIOFIX_HACK_CONFIG_H
/**
* Attempt to protect certain CSM memory regions from being used by the kernel (by Slice).
* On older firmwares this caused wake issues.
*/
#ifndef APTIOFIX_PROTECT_CSM_REGION
#define APTIOFIX_PROTECT_CSM_REGION 1
#endif
/** Forces XNU to use old UEFI memory mapping after hibernation wake.
* May cause memory corruption. See FixHibernateWakeWithoutRelocBlock for details.
*/
#ifndef APTIOFIX_HIBERNATION_FORCE_OLD_MEMORYMAP
#define APTIOFIX_HIBERNATION_FORCE_OLD_MEMORYMAP 1
#endif
/** When attempting to reuse old UEFI memory mapping gBS->AllocatePool seems
* to produce the same addresses way more often, and thus the system will not reboot
* when accessing RTShims after waking from hibernation.
* However, gBS->AllocatePool is dangerous, because it may overlap with the kernel
* region and break aslr.
*/
#ifndef APTIOFIX_ALLOCATE_POOL_GIVES_STABLE_ADDR
#define APTIOFIX_ALLOCATE_POOL_GIVES_STABLE_ADDR APTIOFIX_HIBERNATION_FORCE_OLD_MEMORYMAP
#endif
/** boot.efi still tries to allocate runtime memory for reserved segments as of 10.13.3.
* This results in boot failure with "Couldn't allocate memory map" error.
* Proven by GA-H81N-D2H with a single reserved segment:
* 000000009F800000-00000000DF9FFFFF 0000000000040200 8000000000000000
*/
#ifndef APTIOFIX_PROTECT_RESERVED_MEMORY
#define APTIOFIX_PROTECT_RESERVED_MEMORY 1
#endif
/** It is believed that boot.efi on Sandy & Ivy skips 0x10200000 bytes from 0x10000000
* to protect from IGPU bugs, yet if this memory is marked available, it will may be
* used by XNU. So far attempts to enable this did not show any pattern but boot failures.
*/
#define APTIOFIX_SLICE_OVERLAPPING_REGION_FIX 1
#ifndef APTIOFIX_PROTECT_IGPU_SANDY_IVY_RESERVED_MEMORY
#define APTIOFIX_PROTECT_IGPU_SANDY_IVY_RESERVED_MEMORY 1
#endif
/** Attempt to protect some memory region from being used by the kernel (by Slice).
* It is believed to cause sleep issues on some systems, because this region
* is generally marked as conventional memory.
*/
#ifndef APTIOFIX_UNMARKED_OVERLAPPING_REGION_FIX
#define APTIOFIX_UNMARKED_OVERLAPPING_REGION_FIX 1
#endif
/** Calculate aslr slide ourselves when some addresses are not available for XNU. */
#ifndef APTIOFIX_ALLOW_CUSTOM_ASLR_IMPLEMENTATION
#define APTIOFIX_ALLOW_CUSTOM_ASLR_IMPLEMENTATION 1
#endif
/** This is important for several boards that cannot boot with slide=0, which safe mode enforces. */
#ifndef APTIOFIX_ALLOW_ASLR_IN_SAFE_MODE
#define APTIOFIX_ALLOW_ASLR_IN_SAFE_MODE 1
#endif
/** Hide slide=x value from os for increased security when using custom aslr. */
#ifndef APTIOFIX_CLEANUP_SLIDE_BOOT_ARGUMENT
#define APTIOFIX_CLEANUP_SLIDE_BOOT_ARGUMENT APTIOFIX_ALLOW_CUSTOM_ASLR_IMPLEMENTATION
#endif
/**
* Speculated maximum kernel size (in bytes) to use when looking for a free memory region.
* Used by APTIOFIX_ALLOW_CUSTOM_ASLR_IMPLEMENTATION to determine valid slide values.
* 10.12.6 allocates at least approximately 287 MBs, we round it to 384 MBs
* This seems to work pretty well on X299. Yet it may be a good idea to make a boot-arg.
*/
#ifndef APTIOFIX_SPECULATED_KERNEL_SIZE
#define APTIOFIX_SPECULATED_KERNEL_SIZE ((UINTN)0x18000000)
#endif
/** Maximum number of supported runtime reloc protection areas */
#ifndef APTIFIX_MAX_RT_RELOC_NUM
#define APTIFIX_MAX_RT_RELOC_NUM ((UINTN)64)
#endif
/**
* Perform invasive memory dumps when -aptiodump -v are passed to boot.efi.
* This allows to reliably get the memory maps when in-OS dtrace script is broken.
* Enable for development and testing purposes.
*/
#ifndef APTIOFIX_ALLOW_MEMORY_DUMP_ARG
#define APTIOFIX_ALLOW_MEMORY_DUMP_ARG 0
#endif
/**
* Performing memory map dumps may alter memory map contents themselves, so it is important to ensure
* no memory is allocated during the dump process. This is especially crtitical for most ASUS APTIO V
* boards for Skylake and newer, which may crash after bootng.
*/
#ifndef APTIOFIX_CUSTOM_POOL_ALLOCATOR
#define APTIOFIX_CUSTOM_POOL_ALLOCATOR APTIOFIX_ALLOW_MEMORY_DUMP_ARG
#endif
/**
* Maximum reserved area used by the custom pool allocator. This area must be large enough
* to fit the screen buffer, but considerably small to avoid colliding with the kernel area.
* 32 MB appears experimentally proven to be good enough for most of the boards.
*/
#ifndef APTIOFIX_CUSTOM_POOL_ALLOCATOR_SIZE
#define APTIOFIX_CUSTOM_POOL_ALLOCATOR_SIZE 0x2000000
#endif
#endif // APTIOFIX_HACK_CONFIG_H