* file: pe_init.c
* i386 platform expert initialization.
*/
+
#include <sys/types.h>
#include <mach/vm_param.h>
#include <machine/machine_routines.h>
#include <kern/sched_prim.h>
#include <kern/debug.h>
+#if CONFIG_CSR
+#include <sys/csr.h>
+#endif
+
#include "boot_images.h"
/* extern references */
extern void pe_identify_machine(void * args);
-extern int
-vc_display_lzss_icon(uint32_t dst_x, uint32_t dst_y,
- uint32_t image_width, uint32_t image_height,
- const uint8_t *compressed_image,
- uint32_t compressed_size,
- const uint8_t *clut);
/* private globals */
PE_state_t PE_state;
{
enum { kMaxBootVar = 128 };
- typedef struct {
- char name[32];
- unsigned long length;
- unsigned long value[2];
- } DriversPackageProp;
-
boolean_t bootClutInitialized = FALSE;
boolean_t noroot_rle_Initialized = FALSE;
default_noroot_data = failedBootPict;
}
- /*
- * Initialize the panic UI
- */
- panic_ui_initialize( (unsigned char *) appleClut8 );
-
/*
* Initialize the spinning wheel (progress indicator).
*/
- vc_progress_initialize( &default_progress, default_progress_data,
- (unsigned char *) appleClut8 );
+ vc_progress_initialize(&default_progress,
+ default_progress_data1x,
+ default_progress_data2x,
+ default_progress_data3x,
+ (unsigned char *) appleClut8);
- (void) StartIOKit( PE_state.deviceTreeHead, PE_state.bootArgs, gPEEFIRuntimeServices, NULL);
+ StartIOKit( PE_state.deviceTreeHead, PE_state.bootArgs, gPEEFIRuntimeServices, NULL);
}
void PE_init_platform(boolean_t vm_initialized, void * _args)
// New EFI-style
PE_state.bootArgs = _args;
PE_state.deviceTreeHead = (void *) ml_static_ptovirt(args->deviceTreeP);
- PE_state.video.v_baseAddr = args->Video.v_baseAddr; // remains physical address
- PE_state.video.v_rowBytes = args->Video.v_rowBytes;
- PE_state.video.v_width = args->Video.v_width;
- PE_state.video.v_height = args->Video.v_height;
- PE_state.video.v_depth = args->Video.v_depth;
- PE_state.video.v_display = args->Video.v_display;
- strlcpy(PE_state.video.v_pixelFormat, "PPPPPPPP",
- sizeof(PE_state.video.v_pixelFormat));
+ if (args->Video.v_baseAddr) {
+ PE_state.video.v_baseAddr = args->Video.v_baseAddr; // remains physical address
+ PE_state.video.v_rowBytes = args->Video.v_rowBytes;
+ PE_state.video.v_width = args->Video.v_width;
+ PE_state.video.v_height = args->Video.v_height;
+ PE_state.video.v_depth = args->Video.v_depth;
+ PE_state.video.v_display = args->Video.v_display;
+ strlcpy(PE_state.video.v_pixelFormat, "PPPPPPPP",
+ sizeof(PE_state.video.v_pixelFormat));
+ } else {
+ PE_state.video.v_baseAddr = args->VideoV1.v_baseAddr; // remains physical address
+ PE_state.video.v_rowBytes = args->VideoV1.v_rowBytes;
+ PE_state.video.v_width = args->VideoV1.v_width;
+ PE_state.video.v_height = args->VideoV1.v_height;
+ PE_state.video.v_depth = args->VideoV1.v_depth;
+ PE_state.video.v_display = args->VideoV1.v_display;
+ strlcpy(PE_state.video.v_pixelFormat, "PPPPPPPP",
+ sizeof(PE_state.video.v_pixelFormat));
+ }
+
+#ifdef kBootArgsFlagHiDPI
+ if (args->flags & kBootArgsFlagHiDPI)
+ PE_state.video.v_scale = kPEScaleFactor2x;
+ else
+ PE_state.video.v_scale = kPEScaleFactor1x;
+#else
+ PE_state.video.v_scale = kPEScaleFactor1x;
+#endif
}
if (!vm_initialized) {
}
pe_identify_machine(args);
- } else {
pe_init_debug();
}
boolean_t
PE_reboot_on_panic(void)
{
- return FALSE;
+ boot_args *args = (boot_args *)PE_state.bootArgs;
+
+ if (args->flags & kBootArgsFlagRebootOnPanic)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void
+PE_sync_panic_buffers(void)
+{
+}
+
+/* rdar://problem/21244753 */
+uint32_t
+PE_i_can_has_debugger(uint32_t *debug_flags)
+{
+#if CONFIG_CSR
+ if (csr_check(CSR_ALLOW_KERNEL_DEBUGGER) != 0 &&
+ csr_check(CSR_ALLOW_APPLE_INTERNAL) != 0) {
+ if (debug_flags)
+ *debug_flags = 0;
+ return FALSE;
+ }
+#endif
+ if (debug_flags) {
+ *debug_flags = debug_boot_arg;
+ }
+ return TRUE;
}