1735f1daeSFredrik Holmqvist /* 2735f1daeSFredrik Holmqvist * Copyright 2014-2016 Haiku, Inc. All rights reserved. 3735f1daeSFredrik Holmqvist * Copyright 2013 Fredrik Holmqvist, fredrik.holmqvist@gmail.com. All rights reserved. 4735f1daeSFredrik Holmqvist * Distributed under the terms of the MIT License. 5735f1daeSFredrik Holmqvist */ 6735f1daeSFredrik Holmqvist 7735f1daeSFredrik Holmqvist 8*e2e1558aSJessica Hamilton #include <boot/platform.h> 9*e2e1558aSJessica Hamilton #include <boot/stage2.h> 10*e2e1558aSJessica Hamilton #include <boot/stdio.h> 11735f1daeSFredrik Holmqvist 12735f1daeSFredrik Holmqvist #include "console.h" 13735f1daeSFredrik Holmqvist #include "efi_platform.h" 14735f1daeSFredrik Holmqvist 15735f1daeSFredrik Holmqvist 16735f1daeSFredrik Holmqvist extern void (*__ctor_list)(void); 17735f1daeSFredrik Holmqvist extern void (*__ctor_end)(void); 18735f1daeSFredrik Holmqvist 19735f1daeSFredrik Holmqvist 20735f1daeSFredrik Holmqvist const EFI_SYSTEM_TABLE *kSystemTable; 21735f1daeSFredrik Holmqvist const EFI_BOOT_SERVICES *kBootServices; 22735f1daeSFredrik Holmqvist const EFI_RUNTIME_SERVICES *kRuntimeServices; 23735f1daeSFredrik Holmqvist 24735f1daeSFredrik Holmqvist 25735f1daeSFredrik Holmqvist static void 26735f1daeSFredrik Holmqvist call_ctors(void) 27735f1daeSFredrik Holmqvist { 28735f1daeSFredrik Holmqvist void (**f)(void); 29735f1daeSFredrik Holmqvist 30735f1daeSFredrik Holmqvist for (f = &__ctor_list; f < &__ctor_end; f++) 31735f1daeSFredrik Holmqvist (**f)(); 32735f1daeSFredrik Holmqvist } 33735f1daeSFredrik Holmqvist 34735f1daeSFredrik Holmqvist 35*e2e1558aSJessica Hamilton extern "C" uint32 36*e2e1558aSJessica Hamilton platform_boot_options() 37*e2e1558aSJessica Hamilton { 38*e2e1558aSJessica Hamilton return 0; 39*e2e1558aSJessica Hamilton } 40*e2e1558aSJessica Hamilton 41*e2e1558aSJessica Hamilton 42*e2e1558aSJessica Hamilton extern "C" void 43*e2e1558aSJessica Hamilton platform_start_kernel(void) 44*e2e1558aSJessica Hamilton { 45*e2e1558aSJessica Hamilton panic("platform_start_kernel not implemented"); 46*e2e1558aSJessica Hamilton } 47*e2e1558aSJessica Hamilton 48*e2e1558aSJessica Hamilton 49*e2e1558aSJessica Hamilton extern "C" void 50*e2e1558aSJessica Hamilton platform_exit(void) 51*e2e1558aSJessica Hamilton { 52*e2e1558aSJessica Hamilton return; 53*e2e1558aSJessica Hamilton } 54*e2e1558aSJessica Hamilton 55*e2e1558aSJessica Hamilton 56735f1daeSFredrik Holmqvist /** 57735f1daeSFredrik Holmqvist * efi_main - The entry point for the EFI application 58735f1daeSFredrik Holmqvist * @image: firmware-allocated handle that identifies the image 59735f1daeSFredrik Holmqvist * @systemTable: EFI system table 60735f1daeSFredrik Holmqvist */ 61735f1daeSFredrik Holmqvist extern "C" EFI_STATUS 62735f1daeSFredrik Holmqvist efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systemTable) 63735f1daeSFredrik Holmqvist { 64*e2e1558aSJessica Hamilton stage2_args args; 65*e2e1558aSJessica Hamilton 66735f1daeSFredrik Holmqvist kSystemTable = systemTable; 67735f1daeSFredrik Holmqvist kBootServices = systemTable->BootServices; 68735f1daeSFredrik Holmqvist kRuntimeServices = systemTable->RuntimeServices; 69735f1daeSFredrik Holmqvist 70*e2e1558aSJessica Hamilton memset(&args, 0, sizeof(stage2_args)); 71*e2e1558aSJessica Hamilton 72735f1daeSFredrik Holmqvist call_ctors(); 73735f1daeSFredrik Holmqvist 74735f1daeSFredrik Holmqvist console_init(); 75735f1daeSFredrik Holmqvist 76*e2e1558aSJessica Hamilton main(&args); 77735f1daeSFredrik Holmqvist 78735f1daeSFredrik Holmqvist return EFI_SUCCESS; 79735f1daeSFredrik Holmqvist } 80