OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
BootCompatInternal.h
Go to the documentation of this file.
1
15#ifndef BOOT_COMPAT_INTERNAL_H
16#define BOOT_COMPAT_INTERNAL_H
17
18#include <Uefi.h>
19
22
26#include <Library/OcMemoryLib.h>
27
28#include <Protocol/LoadedImage.h>
30
31//
32// The kernel is normally allocated at base 0x100000 + slide address.
33//
34// For slide=0x1~0x7F the kernel is allocated from
35// 0x100000 + 0x200000 till 0x100000 + 0xFE00000.
36//
37// For slide = 0x80~0xFF on Sandy Bridge or Ivy Bridge CPUs from
38// 0x100000 + 0x20200000 till 0x100000? + 0x30000000??.
39//
40// For slide = 0x80~0xFF on Other CPUs from
41// 0x100000 + 0x10000000 till 0x100000 + 0x1FE00000.
42//
43
48#define RT_RELOC_PROTECT_MAX_NUM ((UINTN) 64)
49
54#define RT_DESC_ENTRY_NUM ((UINTN) 64)
55
59#define KERNEL_STATIC_VADDR ((UINT64) 0xFFFFFF8000000000ULL)
60
64#define KERNEL_HIB_VADDR ((UINTN) (0xFFFFFF8000100000ULL & MAX_UINTN))
65
69#define KERNEL_TEXT_VADDR ((UINTN) (0xFFFFFF8000200000ULL & MAX_UINTN))
70
74#define KERNEL_TEXT_VADDR_LEGACY 0x111000
75
79#define KERNEL_BASE_PADDR ((UINT32) (KERNEL_HIB_VADDR & MAX_UINT32))
80
84#define KERNEL_TEXT_PADDR ((UINT32) (KERNEL_TEXT_VADDR & MAX_UINT32))
85
89#define KERNEL_TEXT_PADDR_LEGACY (KERNEL_TEXT_VADDR_LEGACY)
90
94#define SLIDE_GRANULARITY ((UINTN) SIZE_2MB)
95
99#define TOTAL_SLIDE_NUM ((UINTN) 0x100)
100
104#define SLIDE_ERRATA_NUM ((UINTN) 0x80)
105
109#define SLIDE_ERRATA_SKIP_RANGE ((UINTN) 0x10200000)
110
117#define ESTIMATED_KERNEL_SIZE ((UINTN) (200 * SIZE_1MB))
118
125#define ESTIMATED_CALL_GATE_SIZE 256
126
130#define CALL_GATE_JUMP_SIZE (sizeof (CALL_GATE_JUMP))
131
132/*
133 Minimum size of the patched call gate.
134*/
135#define CALL_GATE_MIN_SIZE (ESTIMATED_CALL_GATE_SIZE + CALL_GATE_JUMP_SIZE)
136
140#pragma pack(push,1)
141typedef struct CALL_GATE_JUMP_ {
142 struct {
143 UINT8 Command[3];
144 UINT32 Argument;
146 struct {
147 UINT16 Command;
148 UINT32 Argument;
149 UINT64 Address;
152STATIC_ASSERT (sizeof (CALL_GATE_JUMP) == 7 + 14, "Invalid CALL_GATE_JUMP size");
153#pragma pack(pop)
154
158typedef
159UINTN
160(EFIAPI *KERNEL_CALL_GATE)(
161 IN UINTN Arg1,
162 IN UINTN Arg2
163 );
164
168typedef
169UINTN
170(EFIAPI *RELOCATION_CALL_GATE)(
171 IN UINTN QWordCount,
172 IN UINTN EntryPoint,
173 IN EFI_PHYSICAL_ADDRESS Source,
174 IN UINTN Args
175 );
176
184 EFI_PHYSICAL_ADDRESS PhysicalStart;
188 EFI_PHYSICAL_ADDRESS PhysicalEnd;
192 EFI_MEMORY_TYPE Type;
194
208
217 EFI_ALLOCATE_PAGES AllocatePages;
222 EFI_FREE_PAGES FreePages;
227 EFI_GET_MEMORY_MAP GetMemoryMap;
232 EFI_ALLOCATE_POOL AllocatePool;
237 EFI_FREE_POOL FreePool;
242 EFI_EXIT_BOOT_SERVICES ExitBootServices;
247 EFI_IMAGE_LOAD LoadImage;
252 EFI_IMAGE_START StartImage;
257 EFI_GET_VARIABLE GetVariable;
259
315
373
424
458
468 VOID
469 );
470
476VOID
478 IN OUT BOOT_COMPAT_CONTEXT *BootCompat
479 );
480
486VOID
488 IN OUT BOOT_COMPAT_CONTEXT *BootCompat
489 );
490
498VOID
500 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
501 IN OUT EFI_LOADED_IMAGE *LoadedImage,
502 IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL
503 );
504
510VOID
512 IN OUT BOOT_COMPAT_CONTEXT *BootCompat
513 );
514
523VOID
525 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
526 IN EFI_PHYSICAL_ADDRESS CallGate,
527 IN UINTN HookAddress
528 );
529
536VOID
538 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
539 IN OUT VOID *BootArgs
540 );
541
548VOID
550 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
551 IN UINTN ImageHeaderPage
552 );
553
563EFI_STATUS
565 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
566 IN UINTN MemoryMapSize,
567 IN UINTN DescriptorSize,
568 IN UINT32 DescriptorVersion,
569 IN EFI_MEMORY_DESCRIPTOR *MemoryMap
570 );
571
576VOID
578 VOID
579 );
580
590UINTN
591EFIAPI
593 IN UINTN Args
594 );
595
612EFI_STATUS
613EFIAPI
615 IN UINTN SystemTable,
616 IN OUT APPLE_EFI_BOOT_RT_KCG_ARGS *KcgArguments,
617 IN KERNEL_CALL_GATE CallGate
618 );
619
634UINTN
635EFIAPI
637 IN UINTN Args,
638 IN UINTN EntryPoint,
639 IN KERNEL_CALL_GATE CallGate
640 );
641
648VOID
650 IN OUT UINT8 *ImageBase,
651 IN UINTN ImageSize
652 );
653
672EFI_STATUS
674 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
675 IN EFI_GET_VARIABLE GetVariable,
676 IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL,
677 IN OC_MEMORY_FILTER FilterMap OPTIONAL,
678 IN VOID *FilterMapContext OPTIONAL,
679 IN CHAR16 *VariableName,
680 IN EFI_GUID *VendorGuid,
681 OUT UINT32 *Attributes OPTIONAL,
682 IN OUT UINTN *DataSize,
683 OUT VOID *Data
684 );
685
693VOID
695 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
696 IN OUT OC_BOOT_ARGUMENTS *BootArgs
697 );
698
709UINTN
711 IN OUT BOOT_COMPAT_CONTEXT *BootCompat
712 );
713
727EFI_STATUS
729 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
730 IN EFI_GET_MEMORY_MAP GetMemoryMap,
731 IN EFI_ALLOCATE_PAGES AllocatePages,
732 IN UINTN NumberOfPages,
733 IN OUT EFI_PHYSICAL_ADDRESS *Memory
734 );
735
744EFI_STATUS
746 IN OUT BOOT_COMPAT_CONTEXT *BootCompat
747 );
748
755EFI_STATUS
757 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
758 IN OUT OC_BOOT_ARGUMENTS *BA
759 );
760
768VOID
770 IN OUT BOOT_COMPAT_CONTEXT *BootCompat,
771 IN OUT OC_BOOT_ARGUMENTS *BA
772 );
773
784VOID
786 IN OUT UINTN *Args,
787 IN BOOT_COMPAT_CONTEXT *BootCompat,
788 IN KERNEL_CALL_GATE CallGate,
789 IN UINTN *KcgArg1,
790 IN UINTN KcgArg2
791 );
792
793#endif // BOOT_COMPAT_INTERNAL_H
#define BOOT_LINE_LENGTH
EFI_STATUS EFIAPI AppleMapPrepareKernelStateNew64(IN UINTN SystemTable, IN OUT APPLE_EFI_BOOT_RT_KCG_ARGS *KcgArguments, IN KERNEL_CALL_GATE CallGate)
UINTN EFIAPI AppleMapPrepareKernelState32(IN UINTN Args)
EFI_STATUS AppleRelocationRelease(IN OUT BOOT_COMPAT_CONTEXT *BootCompat)
VOID AppleSlideRestore(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN OUT OC_BOOT_ARGUMENTS *BootArgs)
#define RT_RELOC_PROTECT_MAX_NUM
struct RT_RELOC_PROTECT_INFO_ RT_RELOC_PROTECT_INFO
EFI_STATUS AppleRelocationVirtualize(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN OUT OC_BOOT_ARGUMENTS *BA)
UINTN(EFIAPI * KERNEL_CALL_GATE)(IN UINTN Arg1, IN UINTN Arg2)
VOID AppleRelocationRebase(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN OUT OC_BOOT_ARGUMENTS *BA)
struct RT_RELOC_PROTECT_DATA_ RT_RELOC_PROTECT_DATA
BOOT_COMPAT_CONTEXT * GetBootCompatContext(VOID)
STATIC_ASSERT(sizeof(CALL_GATE_JUMP)==7+14, "Invalid CALL_GATE_JUMP size")
struct KERNEL_SUPPORT_STATE_ KERNEL_SUPPORT_STATE
VOID AppleSlideUnlockForSafeMode(IN OUT UINT8 *ImageBase, IN UINTN ImageSize)
VOID AppleMapPrepareForHibernateWake(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN UINTN ImageHeaderPage)
VOID AppleRelocationCallGate64(IN OUT UINTN *Args, IN BOOT_COMPAT_CONTEXT *BootCompat, IN KERNEL_CALL_GATE CallGate, IN UINTN *KcgArg1, IN UINTN KcgArg2)
VOID InstallServiceOverrides(IN OUT BOOT_COMPAT_CONTEXT *BootCompat)
UINTN(EFIAPI * RELOCATION_CALL_GATE)(IN UINTN QWordCount, IN UINTN EntryPoint, IN EFI_PHYSICAL_ADDRESS Source, IN UINTN Args)
struct CALL_GATE_JUMP_ CALL_GATE_JUMP
VOID AppleMapPrepareBooterState(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN OUT EFI_LOADED_IMAGE *LoadedImage, IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL)
VOID AppleMapPrepareKernelJump32(IN OUT BOOT_COMPAT_CONTEXT *BootCompat)
UINTN EFIAPI AppleMapPrepareKernelStateOld64(IN UINTN Args, IN UINTN EntryPoint, IN KERNEL_CALL_GATE CallGate)
#define RT_DESC_ENTRY_NUM
EFI_STATUS AppleMapPrepareMemState(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN UINTN MemoryMapSize, IN UINTN DescriptorSize, IN UINT32 DescriptorVersion, IN EFI_MEMORY_DESCRIPTOR *MemoryMap)
VOID AppleMapPrepareMemoryPool(IN OUT BOOT_COMPAT_CONTEXT *BootCompat)
EFI_STATUS AppleRelocationAllocatePages(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN EFI_GET_MEMORY_MAP GetMemoryMap, IN EFI_ALLOCATE_PAGES AllocatePages, IN UINTN NumberOfPages, IN OUT EFI_PHYSICAL_ADDRESS *Memory)
UINTN AppleSlideGetRelocationSize(IN OUT BOOT_COMPAT_CONTEXT *BootCompat)
VOID AppleMapPrepareKernelJump64(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN EFI_PHYSICAL_ADDRESS CallGate, IN UINTN HookAddress)
struct UEFI_SERVICES_POINTERS_ UEFI_SERVICES_POINTERS
struct BOOT_COMPAT_CONTEXT_ BOOT_COMPAT_CONTEXT
#define TOTAL_SLIDE_NUM
VOID AsmAppleMapPrepareKernelState32(VOID)
EFI_STATUS AppleSlideGetVariable(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN EFI_GET_VARIABLE GetVariable, IN EFI_GET_MEMORY_MAP GetMemoryMap OPTIONAL, IN OC_MEMORY_FILTER FilterMap OPTIONAL, IN VOID *FilterMapContext OPTIONAL, IN CHAR16 *VariableName, IN EFI_GUID *VendorGuid, OUT UINT32 *Attributes OPTIONAL, IN OUT UINTN *DataSize, OUT VOID *Data)
struct SERVICES_OVERRIDE_STATE_ SERVICES_OVERRIDE_STATE
VOID AppleMapPrepareForBooting(IN OUT BOOT_COMPAT_CONTEXT *BootCompat, IN OUT VOID *BootArgs)
struct SLIDE_SUPPORT_STATE_ SLIDE_SUPPORT_STATE
VOID(* OC_MEMORY_FILTER)(IN VOID *Context OPTIONAL, IN UINTN MemoryMapSize, IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, IN UINTN DescriptorSize)
SLIDE_SUPPORT_STATE SlideSupport
SERVICES_OVERRIDE_STATE ServiceState
RT_RELOC_PROTECT_DATA RtReloc
UEFI_SERVICES_POINTERS ServicePtrs
KERNEL_SUPPORT_STATE KernelState
struct CALL_GATE_JUMP_::@79 Jmp
struct CALL_GATE_JUMP_::@78 LeaRip
EFI_PHYSICAL_ADDRESS RelocationBlock
EFI_PHYSICAL_ADDRESS SysTableRtArea
EFI_CONFIGURATION_TABLE * ConfigurationTable
EFI_MEMORY_DESCRIPTOR VmMap[RT_DESC_ENTRY_NUM]
RT_RELOC_PROTECT_INFO RelocInfo[RT_RELOC_PROTECT_MAX_NUM]
EFI_PHYSICAL_ADDRESS PhysicalStart
EFI_PHYSICAL_ADDRESS PhysicalEnd
EFI_LOADED_IMAGE_PROTOCOL * LastAppleBootImage
OC_FIRMWARE_RUNTIME_PROTOCOL * FwRuntime
EFI_PHYSICAL_ADDRESS OldKernelCallGate
UINT8 ValidSlides[TOTAL_SLIDE_NUM]
CHAR8 BootArgs[BOOT_LINE_LENGTH]
EFI_EXIT_BOOT_SERVICES ExitBootServices
EFI_ALLOCATE_POOL AllocatePool
EFI_ALLOCATE_PAGES AllocatePages
EFI_GET_MEMORY_MAP GetMemoryMap