1 | /*␊ |
2 | * Copyright (c) 2009 Evan Lojewski. All rights reserved.␊ |
3 | *␊ |
4 | */␊ |
5 | ␊ |
6 | #include <mach-o/loader.h>␊ |
7 | #include <mach-o/nlist.h>␊ |
8 | ␊ |
9 | #ifndef __BOOT2_KERNEL_PATCHER_H␊ |
10 | #define __BOOT2_KERNEL_PATCHER_H␊ |
11 | ␊ |
12 | #define CPUID_MODEL_ANY␉␉0x00␊ |
13 | #define CPUID_MODEL_UNKNOWN␉0x01␊ |
14 | ␊ |
15 | #define CPU_MODEL_PENTIUM_M␉␉0x0D␊ |
16 | #define CPU_MODEL_YONAH␉␉␉0x0E␉␉␉// Sossaman, Yonah␊ |
17 | #define CPU_MODEL_MEROM␉␉␉0x0F␉␉␉// Allendale, Conroe, Kentsfield, Woodcrest, Clovertown, Tigerton, Merom␊ |
18 | #define CPU_MODEL_PENRYN␉␉0x17␉␉␉// Wolfdale, Yorkfield, Harpertown, Penryn␊ |
19 | #define CPU_MODEL_NEHALEM␉␉0x1A␉␉␉// Bloomfield. Nehalem-EP, Nehalem-WS, Gainestown␊ |
20 | #define CPU_MODEL_ATOM␉␉␉0x1C␉␉␉// Atom␊ |
21 | #define CPU_MODEL_FIELDS␉␉0x1E␉␉␉// Lynnfield, Clarksfield, Jasper Forest␊ |
22 | #define CPU_MODEL_DALES␉␉␉0x1F␉␉␉// Havendale, Auburndale␊ |
23 | #define CPU_MODEL_DALES_32NM␉0x25␉␉␉// Clarkdale, Arrandale␊ |
24 | #define CPU_MODEL_SANDY␉␉␉0x2A␉␉␉// Sandy Bridge␊ |
25 | #define CPU_MODEL_WESTMERE␉␉0x2C␉␉␉// Gulftown, Westmere-EP, Westmere-WS␊ |
26 | #define CPU_MODEL_SANDY_XEON␉0x2D␉␉␉// Sandy Bridge Xeon␊ |
27 | #define CPU_MODEL_NEHALEM_EX␉0x2E␉␉␉// Beckton␊ |
28 | #define CPU_MODEL_WESTMERE_EX␉0x2F␊ |
29 | ␊ |
30 | #define KERNEL_ANY␉0x00␊ |
31 | #define KERNEL_64␉0x01␊ |
32 | #define KERNEL_32␉0x02␊ |
33 | #define KERNEL_ERR␉0xFF␊ |
34 | ␊ |
35 | typedef struct patchRoutine_t␊ |
36 | {␊ |
37 | ␉void(*patchRoutine)(void*);␊ |
38 | ␉int validArchs;␊ |
39 | ␉int validCpu;␊ |
40 | ␉struct patchRoutine_t* next;␊ |
41 | } patchRoutine_t;␊ |
42 | ␊ |
43 | ␊ |
44 | typedef struct kernSymbols_t␊ |
45 | {␊ |
46 | ␉char* symbol;␊ |
47 | ␉UInt64 addr;␊ |
48 | ␉struct kernSymbols_t* next;␊ |
49 | } kernSymbols_t;␊ |
50 | ␊ |
51 | kernSymbols_t* lookup_kernel_symbol(const char* name);␊ |
52 | void register_kernel_symbol(int kernelType, const char* name);␊ |
53 | ␊ |
54 | long long symbol_handler(char* symbolName, long long addr, char is64);␊ |
55 | void patch_kernel(void* kernelData, void* arg2, void* arg3, void *arg4);␊ |
56 | void register_kernel_patch(void* patch, int arch, int cpus);␊ |
57 | ␊ |
58 | int locate_symbols(void* kernelData);␊ |
59 | ␊ |
60 | int determineKernelArchitecture(void* kernelData);␊ |
61 | ␊ |
62 | /*␊ |
63 | * Internal patches provided by this module.␊ |
64 | */␊ |
65 | void patch_cpuid_set_info_all(void* kernelData);␊ |
66 | void patch_cpuid_set_info_32(void* kernelData, UInt32 impersonateFamily, UInt8 impersonateModel);␊ |
67 | void patch_cpuid_set_info_64(void* kernelData, UInt32 impersonateFamily, UInt8 impersonateModel);␊ |
68 | ␊ |
69 | void patch_pmCPUExitHaltToOff(void* kernelData);␊ |
70 | void patch_lapic_init(void* kernelData);␊ |
71 | void patch_commpage_stuff_routine(void* kernelData);␊ |
72 | void patch_lapic_configure(void* kernelData);␊ |
73 | void patch_lapic_interrupt(void* kernelData);␊ |
74 | ␊ |
75 | #endif /* !__BOOT2_KERNEL_PATCHER_H */␊ |
76 | |