]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ | |
5 | * | |
6 | * This file contains Original Code and/or Modifications of Original Code | |
7 | * as defined in and that are subject to the Apple Public Source License | |
8 | * Version 2.0 (the 'License'). You may not use this file except in | |
9 | * compliance with the License. The rights granted to you under the License | |
10 | * may not be used to create, or enable the creation or redistribution of, | |
11 | * unlawful or unlicensed copies of an Apple operating system, or to | |
12 | * circumvent, violate, or enable the circumvention or violation of, any | |
13 | * terms of an Apple operating system software license agreement. | |
14 | * | |
15 | * Please obtain a copy of the License at | |
16 | * http://www.opensource.apple.com/apsl/ and read it before using this file. | |
17 | * | |
18 | * The Original Code and all software distributed under the License are | |
19 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
22 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | |
23 | * Please see the License for the specific language governing rights and | |
24 | * limitations under the License. | |
25 | * | |
26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ | |
27 | */ | |
28 | #ifndef _PEXPERT_I386_BOOT_H | |
29 | #define _PEXPERT_I386_BOOT_H | |
30 | ||
31 | #include <stdint.h> | |
32 | ||
33 | /* | |
34 | * What the booter leaves behind for the kernel. | |
35 | */ | |
36 | ||
37 | /* | |
38 | * Types of boot driver that may be loaded by the booter. | |
39 | */ | |
40 | enum { | |
41 | kBootDriverTypeInvalid = 0, | |
42 | kBootDriverTypeKEXT = 1, | |
43 | kBootDriverTypeMKEXT = 2 | |
44 | }; | |
45 | ||
46 | enum { | |
47 | kEfiReservedMemoryType = 0, | |
48 | kEfiLoaderCode = 1, | |
49 | kEfiLoaderData = 2, | |
50 | kEfiBootServicesCode = 3, | |
51 | kEfiBootServicesData = 4, | |
52 | kEfiRuntimeServicesCode = 5, | |
53 | kEfiRuntimeServicesData = 6, | |
54 | kEfiConventionalMemory = 7, | |
55 | kEfiUnusableMemory = 8, | |
56 | kEfiACPIReclaimMemory = 9, | |
57 | kEfiACPIMemoryNVS = 10, | |
58 | kEfiMemoryMappedIO = 11, | |
59 | kEfiMemoryMappedIOPortSpace = 12, | |
60 | kEfiPalCode = 13, | |
61 | kEfiMaxMemoryType = 14 | |
62 | }; | |
63 | ||
64 | /* | |
65 | * Memory range descriptor. | |
66 | */ | |
67 | typedef struct EfiMemoryRange { | |
68 | uint32_t Type; | |
69 | uint32_t Pad; | |
70 | uint64_t PhysicalStart; | |
71 | uint64_t VirtualStart; | |
72 | uint64_t NumberOfPages; | |
73 | uint64_t Attribute; | |
74 | } EfiMemoryRange; | |
75 | ||
76 | #define BOOT_LINE_LENGTH 1024 | |
77 | #define BOOT_STRING_LEN BOOT_LINE_LENGTH | |
78 | ||
79 | /* | |
80 | * Video information.. | |
81 | */ | |
82 | ||
83 | struct Boot_VideoV1 { | |
84 | uint32_t v_baseAddr; /* Base address of video memory */ | |
85 | uint32_t v_display; /* Display Code (if Applicable */ | |
86 | uint32_t v_rowBytes; /* Number of bytes per pixel row */ | |
87 | uint32_t v_width; /* Width */ | |
88 | uint32_t v_height; /* Height */ | |
89 | uint32_t v_depth; /* Pixel Depth */ | |
90 | }; | |
91 | typedef struct Boot_VideoV1 Boot_VideoV1; | |
92 | ||
93 | struct Boot_Video { | |
94 | uint32_t v_display; /* Display Code (if Applicable */ | |
95 | uint32_t v_rowBytes; /* Number of bytes per pixel row */ | |
96 | uint32_t v_width; /* Width */ | |
97 | uint32_t v_height; /* Height */ | |
98 | uint32_t v_depth; /* Pixel Depth */ | |
99 | uint8_t v_rotate; /* Rotation */ | |
100 | uint8_t v_resv_byte[3]; /* Reserved */ | |
101 | uint32_t v_resv[6]; /* Reserved */ | |
102 | uint64_t v_baseAddr; /* Base address of video memory */ | |
103 | }; | |
104 | typedef struct Boot_Video Boot_Video; | |
105 | ||
106 | /* Values for v_display */ | |
107 | ||
108 | #define GRAPHICS_MODE 1 | |
109 | #define FB_TEXT_MODE 2 | |
110 | ||
111 | /* Struct describing an image passed in by the booter */ | |
112 | struct boot_icon_element { | |
113 | unsigned int width; | |
114 | unsigned int height; | |
115 | int y_offset_from_center; | |
116 | unsigned int data_size; | |
117 | unsigned int __reserved1[4]; | |
118 | unsigned char data[0]; | |
119 | }; | |
120 | typedef struct boot_icon_element boot_icon_element; | |
121 | ||
122 | /* Boot argument structure - passed into Mach kernel at boot time. | |
123 | * "Revision" can be incremented for compatible changes | |
124 | */ | |
125 | #define kBootArgsRevision 0 | |
126 | #define kBootArgsRevision0 kBootArgsRevision | |
127 | #define kBootArgsRevision1 1 /* added KC_hdrs_addr */ | |
128 | #define kBootArgsVersion 2 | |
129 | ||
130 | /* Snapshot constants of previous revisions that are supported */ | |
131 | #define kBootArgsVersion1 1 | |
132 | #define kBootArgsVersion2 2 | |
133 | #define kBootArgsRevision2_0 0 | |
134 | ||
135 | #define kBootArgsEfiMode32 32 | |
136 | #define kBootArgsEfiMode64 64 | |
137 | ||
138 | /* Bitfields for boot_args->flags */ | |
139 | #define kBootArgsFlagRebootOnPanic (1 << 0) | |
140 | #define kBootArgsFlagHiDPI (1 << 1) | |
141 | #define kBootArgsFlagBlack (1 << 2) | |
142 | #define kBootArgsFlagCSRActiveConfig (1 << 3) | |
143 | #define kBootArgsFlagCSRConfigMode (1 << 4) | |
144 | #define kBootArgsFlagCSRBoot (1 << 5) | |
145 | #define kBootArgsFlagBlackBg (1 << 6) | |
146 | #define kBootArgsFlagLoginUI (1 << 7) | |
147 | #define kBootArgsFlagInstallUI (1 << 8) | |
148 | #define kBootArgsFlagRecoveryBoot (1 << 10) | |
149 | ||
150 | typedef struct boot_args { | |
151 | uint16_t Revision; /* Revision of boot_args structure */ | |
152 | uint16_t Version; /* Version of boot_args structure */ | |
153 | ||
154 | uint8_t efiMode;/* 32 = 32-bit, 64 = 64-bit */ | |
155 | uint8_t debugMode;/* Bit field with behavior changes */ | |
156 | uint16_t flags; | |
157 | ||
158 | char CommandLine[BOOT_LINE_LENGTH];/* Passed in command line */ | |
159 | ||
160 | uint32_t MemoryMap;/* Physical address of memory map */ | |
161 | uint32_t MemoryMapSize; | |
162 | uint32_t MemoryMapDescriptorSize; | |
163 | uint32_t MemoryMapDescriptorVersion; | |
164 | ||
165 | Boot_VideoV1 VideoV1; /* Video Information */ | |
166 | ||
167 | uint32_t deviceTreeP; /* Physical address of flattened device tree */ | |
168 | uint32_t deviceTreeLength;/* Length of flattened tree */ | |
169 | ||
170 | uint32_t kaddr; /* Physical address of beginning of kernel text */ | |
171 | uint32_t ksize; /* Size of combined kernel text+data+efi */ | |
172 | ||
173 | uint32_t efiRuntimeServicesPageStart;/* physical address of defragmented runtime pages */ | |
174 | uint32_t efiRuntimeServicesPageCount; | |
175 | uint64_t efiRuntimeServicesVirtualPageStart;/* virtual address of defragmented runtime pages */ | |
176 | ||
177 | uint32_t efiSystemTable;/* physical address of system table in runtime area */ | |
178 | uint32_t kslide; | |
179 | ||
180 | uint32_t performanceDataStart;/* physical address of log */ | |
181 | uint32_t performanceDataSize; | |
182 | ||
183 | uint32_t keyStoreDataStart;/* physical address of key store data */ | |
184 | uint32_t keyStoreDataSize; | |
185 | uint64_t bootMemStart; | |
186 | uint64_t bootMemSize; | |
187 | uint64_t PhysicalMemorySize; | |
188 | uint64_t FSBFrequency; | |
189 | uint64_t pciConfigSpaceBaseAddress; | |
190 | uint32_t pciConfigSpaceStartBusNumber; | |
191 | uint32_t pciConfigSpaceEndBusNumber; | |
192 | uint32_t csrActiveConfig; | |
193 | uint32_t csrCapabilities; | |
194 | uint32_t boot_SMC_plimit; | |
195 | uint16_t bootProgressMeterStart; | |
196 | uint16_t bootProgressMeterEnd; | |
197 | Boot_Video Video; /* Video Information */ | |
198 | ||
199 | uint32_t apfsDataStart;/* Physical address of apfs volume key structure */ | |
200 | uint32_t apfsDataSize; | |
201 | ||
202 | /* Version 2, Revision 1 */ | |
203 | uint64_t KC_hdrs_vaddr; | |
204 | ||
205 | uint64_t arvRootHashStart; /* Physical address of system volume root hash file */ | |
206 | uint64_t arvRootHashSize; | |
207 | ||
208 | uint64_t arvManifestStart; /* Physical address of system volume manifest file */ | |
209 | uint64_t arvManifestSize; | |
210 | ||
211 | uint64_t bsARVRootHashStart;/* Physical address of base system root hash file */ | |
212 | uint64_t bsARVRootHashSize; | |
213 | ||
214 | uint64_t bsARVManifestStart;/* Physical address of base system manifest file */ | |
215 | uint64_t bsARVManifestSize; | |
216 | ||
217 | /* Reserved */ | |
218 | uint32_t __reserved4[692]; | |
219 | } boot_args; | |
220 | ||
221 | extern char assert_boot_args_size_is_4096[sizeof(boot_args) == 4096 ? 1 : -1]; | |
222 | ||
223 | #endif /* _PEXPERT_I386_BOOT_H */ |