2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
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.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
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.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
28 #ifndef _PEXPERT_I386_BOOT_H
29 #define _PEXPERT_I386_BOOT_H
34 * What the booter leaves behind for the kernel.
38 * Types of boot driver that may be loaded by the booter.
41 kBootDriverTypeInvalid
= 0,
42 kBootDriverTypeKEXT
= 1,
43 kBootDriverTypeMKEXT
= 2
47 kEfiReservedMemoryType
= 0,
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,
61 kEfiMaxMemoryType
= 14
65 * Memory range descriptor.
67 typedef struct EfiMemoryRange
{
70 uint64_t PhysicalStart
;
71 uint64_t VirtualStart
;
72 uint64_t NumberOfPages
;
76 #define BOOT_LINE_LENGTH 1024
77 #define BOOT_STRING_LEN BOOT_LINE_LENGTH
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 */
91 typedef struct Boot_VideoV1 Boot_VideoV1
;
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 */
104 typedef struct Boot_Video Boot_Video
;
106 /* Values for v_display */
108 #define GRAPHICS_MODE 1
109 #define FB_TEXT_MODE 2
111 /* Struct describing an image passed in by the booter */
112 struct boot_icon_element
{
115 int y_offset_from_center
;
116 unsigned int data_size
;
117 unsigned int __reserved1
[4];
118 unsigned char data
[0];
120 typedef struct boot_icon_element boot_icon_element
;
122 /* Boot argument structure - passed into Mach kernel at boot time.
123 * "Revision" can be incremented for compatible changes
125 #define kBootArgsRevision 0
126 #define kBootArgsRevision0 kBootArgsRevision
127 #define kBootArgsRevision1 1 /* added KC_hdrs_addr */
128 #define kBootArgsVersion 2
130 /* Snapshot constants of previous revisions that are supported */
131 #define kBootArgsVersion1 1
132 #define kBootArgsVersion2 2
133 #define kBootArgsRevision2_0 0
135 #define kBootArgsEfiMode32 32
136 #define kBootArgsEfiMode64 64
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)
150 typedef struct boot_args
{
151 uint16_t Revision
; /* Revision of boot_args structure */
152 uint16_t Version
; /* Version of boot_args structure */
154 uint8_t efiMode
;/* 32 = 32-bit, 64 = 64-bit */
155 uint8_t debugMode
;/* Bit field with behavior changes */
158 char CommandLine
[BOOT_LINE_LENGTH
];/* Passed in command line */
160 uint32_t MemoryMap
;/* Physical address of memory map */
161 uint32_t MemoryMapSize
;
162 uint32_t MemoryMapDescriptorSize
;
163 uint32_t MemoryMapDescriptorVersion
;
165 Boot_VideoV1 VideoV1
; /* Video Information */
167 uint32_t deviceTreeP
; /* Physical address of flattened device tree */
168 uint32_t deviceTreeLength
;/* Length of flattened tree */
170 uint32_t kaddr
; /* Physical address of beginning of kernel text */
171 uint32_t ksize
; /* Size of combined kernel text+data+efi */
173 uint32_t efiRuntimeServicesPageStart
;/* physical address of defragmented runtime pages */
174 uint32_t efiRuntimeServicesPageCount
;
175 uint64_t efiRuntimeServicesVirtualPageStart
;/* virtual address of defragmented runtime pages */
177 uint32_t efiSystemTable
;/* physical address of system table in runtime area */
180 uint32_t performanceDataStart
;/* physical address of log */
181 uint32_t performanceDataSize
;
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 */
199 uint32_t apfsDataStart
;/* Physical address of apfs volume key structure */
200 uint32_t apfsDataSize
;
202 /* Version 2, Revision 1 */
203 uint64_t KC_hdrs_vaddr
;
205 uint64_t arvRootHashStart
; /* Physical address of system volume root hash file */
206 uint64_t arvRootHashSize
;
208 uint64_t arvManifestStart
; /* Physical address of system volume manifest file */
209 uint64_t arvManifestSize
;
211 uint64_t bsARVRootHashStart
;/* Physical address of base system root hash file */
212 uint64_t bsARVRootHashSize
;
214 uint64_t bsARVManifestStart
;/* Physical address of base system manifest file */
215 uint64_t bsARVManifestSize
;
218 uint32_t __reserved4
[692];
221 extern char assert_boot_args_size_is_4096
[sizeof(boot_args
) == 4096 ? 1 : -1];
223 #endif /* _PEXPERT_I386_BOOT_H */