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