/* * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. The rights granted to you under the License * may not be used to create, or enable the creation or redistribution of, * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ #ifndef _PEXPERT_I386_BOOT_H #define _PEXPERT_I386_BOOT_H #include /* * What the booter leaves behind for the kernel. */ /* * Types of boot driver that may be loaded by the booter. */ enum { kBootDriverTypeInvalid = 0, kBootDriverTypeKEXT = 1, kBootDriverTypeMKEXT = 2 }; enum { kEfiReservedMemoryType = 0, kEfiLoaderCode = 1, kEfiLoaderData = 2, kEfiBootServicesCode = 3, kEfiBootServicesData = 4, kEfiRuntimeServicesCode = 5, kEfiRuntimeServicesData = 6, kEfiConventionalMemory = 7, kEfiUnusableMemory = 8, kEfiACPIReclaimMemory = 9, kEfiACPIMemoryNVS = 10, kEfiMemoryMappedIO = 11, kEfiMemoryMappedIOPortSpace = 12, kEfiPalCode = 13, kEfiMaxMemoryType = 14 }; /* * Memory range descriptor. */ typedef struct EfiMemoryRange { uint32_t Type; uint32_t Pad; uint64_t PhysicalStart; uint64_t VirtualStart; uint64_t NumberOfPages; uint64_t Attribute; } EfiMemoryRange; #define BOOT_LINE_LENGTH 1024 #define BOOT_STRING_LEN BOOT_LINE_LENGTH /* * Video information.. */ struct Boot_VideoV1 { uint32_t v_baseAddr; /* Base address of video memory */ uint32_t v_display; /* Display Code (if Applicable */ uint32_t v_rowBytes; /* Number of bytes per pixel row */ uint32_t v_width; /* Width */ uint32_t v_height; /* Height */ uint32_t v_depth; /* Pixel Depth */ }; typedef struct Boot_VideoV1 Boot_VideoV1; struct Boot_Video { uint32_t v_display; // Display Code (if Applicable). uint32_t v_rowBytes; // Number of bytes per pixel row. uint32_t v_width; // Width. uint32_t v_height; // Height. uint32_t v_depth; // Pixel Depth. uint32_t v_resv[7]; // Reserved. uint64_t v_baseAddr; // Base address (64-bit) of video memory. }; typedef struct Boot_Video Boot_Video; /* Values for v_display */ #define GRAPHICS_MODE 1 #define FB_TEXT_MODE 2 /* Struct describing an image passed in by the booter */ struct boot_icon_element { unsigned int width; unsigned int height; int y_offset_from_center; unsigned int data_size; unsigned int __reserved1[4]; unsigned char data[0]; }; typedef struct boot_icon_element boot_icon_element; /* Boot argument structure - passed into Mach kernel at boot time. * "Revision" can be incremented for compatible changes */ // Lion #define kBootArgsRevision 0 #define kBootArgsVersion 2 // Snow Leopard and older #define kBootArgsLegacyVersion 1 #define kBootArgsLegacyRevision 6 /* Snapshot constants of previous revisions that are supported */ #define kBootArgsVersion1 1 #define kBootArgsVersion2 2 #define kBootArgsRevision2_0 0 #define kBootArgsEfiMode32 32 #define kBootArgsEfiMode64 64 /* Bitfields for boot_args->flags */ #define kBootArgsFlagRebootOnPanic (1 << 0) #define kBootArgsFlagHiDPI (1 << 1) #define kBootArgsFlagBlack (1 << 2) #define kBootArgsFlagCSRActiveConfig (1 << 3) #define kBootArgsFlagCSRConfigMode (1 << 4) #define kBootArgsFlagCSRBoot (1 << 5) #define kBootArgsFlagBlackBg (1 << 6) #define kBootArgsFlagLoginUI (1 << 7) #define kBootArgsFlagInstallUI (1 << 8) #define kBootArgsFlagUnknownHS (1 << 9) // 512 (High Sierra only) /* Rootless configuration flags */ // http://www.idelta.info/archives/kext-to-check-sip-rootless-status-on-el-capitan/ #define CSR_ALLOW_UNTRUSTED_KEXTS (1 << 0) /* Allow untrusted kexts */ #define CSR_ALLOW_UNRESTRICTED_FS (1 << 1) /* Allow unrestricted file system. */ #define CSR_ALLOW_TASK_FOR_PID (1 << 2) /* Allow test_for_pid() */ #define CSR_ALLOW_KERNEL_DEBUGGER (1 << 3) #define CSR_ALLOW_APPLE_INTERNAL (1 << 4) #define CSR_ALLOW_UNRESTRICTED_DTRACE (1 << 5) /* Allow unrestricted dtrace */ #define CSR_ALLOW_UNRESTRICTED_NVRAM (1 << 6) /* Allow unrestricted NVRAM */ #define CSR_ALLOW_DEVICE_CONFIGURATION (1 << 7) /* Allow device configuration */ #define CSR_ALLOW_ANY_RECOVERY_OS (1 << 8) #define CSR_ALLOW_UNAPPROVED_KEXTS (1 << 9) #define CSR_VALID_FLAGS (CSR_ALLOW_UNTRUSTED_KEXTS | \ CSR_ALLOW_UNRESTRICTED_FS | \ CSR_ALLOW_TASK_FOR_PID | \ CSR_ALLOW_KERNEL_DEBUGGER | \ CSR_ALLOW_APPLE_INTERNAL | \ CSR_ALLOW_UNRESTRICTED_DTRACE | \ CSR_ALLOW_UNRESTRICTED_NVRAM | \ CSR_ALLOW_DEVICE_CONFIGURATION | \ CSR_ALLOW_ANY_RECOVERY_OS | \ CSR_ALLOW_UNAPPROVED_KEXTS) /* CSR capabilities that a booter can give to the system */ #define CSR_CAPABILITY_UNLIMITED (1 << 0) #define CSR_CAPABILITY_CONFIG (1 << 1) #define CSR_CAPABILITY_APPLE_INTERNAL (1 << 2) #define CSR_VALID_CAPABILITIES (CSR_CAPABILITY_UNLIMITED | CSR_CAPABILITY_CONFIG | CSR_CAPABILITY_APPLE_INTERNAL) typedef struct boot_args { uint16_t Revision; /* Revision of boot_args structure */ uint16_t Version; /* Version of boot_args structure */ uint8_t efiMode; /* 32 means 32-bit mode, 64 means 64-bit mode */ uint8_t debugMode; /* Bit field with behavior changes */ uint16_t flags; char CommandLine[BOOT_LINE_LENGTH]; /* Passed in command line */ uint32_t MemoryMap; /* Physical address of memory map */ uint32_t MemoryMapSize; uint32_t MemoryMapDescriptorSize; uint32_t MemoryMapDescriptorVersion; Boot_VideoV1 VideoV1; /* Video Information */ uint32_t deviceTreeP; /* Physical address of flattened device tree */ uint32_t deviceTreeLength; /* Length of flattened tree */ uint32_t kaddr; /* Physical address of beginning of kernel text */ uint32_t ksize; /* Size of combined kernel text+data+efi */ uint32_t efiRuntimeServicesPageStart; /* physical address of defragmented runtime pages */ uint32_t efiRuntimeServicesPageCount; uint64_t efiRuntimeServicesVirtualPageStart; /* virtual address of defragmented runtime pages */ uint32_t efiSystemTable; /* physical address of system table in runtime area */ uint32_t kslide; uint32_t performanceDataStart; /* physical address of log */ uint32_t performanceDataSize; uint32_t keyStoreDataStart; /* physical address of key store data */ uint32_t keyStoreDataSize; uint64_t bootMemStart; uint64_t bootMemSize; uint64_t PhysicalMemorySize; uint64_t FSBFrequency; uint64_t pciConfigSpaceBaseAddress; uint32_t pciConfigSpaceStartBusNumber; uint32_t pciConfigSpaceEndBusNumber; uint32_t csrActiveConfig; uint32_t csrCapabilities; uint32_t boot_SMC_plimit; uint16_t bootProgressMeterStart; uint16_t bootProgressMeterEnd; Boot_Video Video; /* Video Information */ uint32_t apfsDataStart; // Physical address of apfs volume key structure. uint32_t apfsDataSize; uint32_t __reserved4[710]; } boot_args; typedef struct boot_args_legacy { uint16_t Revision; /* Revision of boot_args structure */ uint16_t Version; /* Version of boot_args structure */ char CommandLine[BOOT_LINE_LENGTH]; /* Passed in command line */ uint32_t MemoryMap; /* Physical address of memory map */ uint32_t MemoryMapSize; uint32_t MemoryMapDescriptorSize; uint32_t MemoryMapDescriptorVersion; Boot_VideoV1 Video; /* Video Information */ uint32_t deviceTreeP; /* Physical address of flattened device tree */ uint32_t deviceTreeLength; /* Length of flattened tree */ uint32_t kaddr; /* Physical address of beginning of kernel text */ uint32_t ksize; /* Size of combined kernel text+data+efi */ uint32_t efiRuntimeServicesPageStart; /* physical address of defragmented runtime pages */ uint32_t efiRuntimeServicesPageCount; uint32_t efiSystemTable; /* physical address of system table in runtime area */ uint8_t efiMode; /* 32 means 32-bit mode, 64 means 64-bit mode */ uint8_t __reserved1[3]; uint32_t __reserved2[1]; uint32_t performanceDataStart; /* physical address of log */ uint32_t performanceDataSize; uint64_t efiRuntimeServicesVirtualPageStart; /* virtual address of defragmented runtime pages */ uint32_t __reserved3[2]; } boot_args_legacy; #endif /* _PEXPERT_I386_BOOT_H */