xref: /xnu-10002.1.13/pexpert/pexpert/i386/boot.h (revision 1031c584a5e37aff177559b9f69dbd3c8c3fd30a)
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 */
224