xref: /haiku/src/system/boot/platform/efi/start.cpp (revision 735f1daee956b15d1e2e8a80d54463fd2aba4a61)
1*735f1daeSFredrik Holmqvist /*
2*735f1daeSFredrik Holmqvist  * Copyright 2014-2016 Haiku, Inc. All rights reserved.
3*735f1daeSFredrik Holmqvist  * Copyright 2013 Fredrik Holmqvist, fredrik.holmqvist@gmail.com. All rights reserved.
4*735f1daeSFredrik Holmqvist  * Distributed under the terms of the MIT License.
5*735f1daeSFredrik Holmqvist  */
6*735f1daeSFredrik Holmqvist 
7*735f1daeSFredrik Holmqvist 
8*735f1daeSFredrik Holmqvist #include <stdio.h>
9*735f1daeSFredrik Holmqvist 
10*735f1daeSFredrik Holmqvist #include "console.h"
11*735f1daeSFredrik Holmqvist #include "efi_platform.h"
12*735f1daeSFredrik Holmqvist 
13*735f1daeSFredrik Holmqvist 
14*735f1daeSFredrik Holmqvist extern void (*__ctor_list)(void);
15*735f1daeSFredrik Holmqvist extern void (*__ctor_end)(void);
16*735f1daeSFredrik Holmqvist 
17*735f1daeSFredrik Holmqvist 
18*735f1daeSFredrik Holmqvist const EFI_SYSTEM_TABLE		*kSystemTable;
19*735f1daeSFredrik Holmqvist const EFI_BOOT_SERVICES		*kBootServices;
20*735f1daeSFredrik Holmqvist const EFI_RUNTIME_SERVICES	*kRuntimeServices;
21*735f1daeSFredrik Holmqvist 
22*735f1daeSFredrik Holmqvist 
23*735f1daeSFredrik Holmqvist static void
24*735f1daeSFredrik Holmqvist call_ctors(void)
25*735f1daeSFredrik Holmqvist {
26*735f1daeSFredrik Holmqvist 	void (**f)(void);
27*735f1daeSFredrik Holmqvist 
28*735f1daeSFredrik Holmqvist 	for (f = &__ctor_list; f < &__ctor_end; f++)
29*735f1daeSFredrik Holmqvist 		(**f)();
30*735f1daeSFredrik Holmqvist }
31*735f1daeSFredrik Holmqvist 
32*735f1daeSFredrik Holmqvist 
33*735f1daeSFredrik Holmqvist /**
34*735f1daeSFredrik Holmqvist  * efi_main - The entry point for the EFI application
35*735f1daeSFredrik Holmqvist  * @image: firmware-allocated handle that identifies the image
36*735f1daeSFredrik Holmqvist  * @systemTable: EFI system table
37*735f1daeSFredrik Holmqvist  */
38*735f1daeSFredrik Holmqvist extern "C" EFI_STATUS
39*735f1daeSFredrik Holmqvist efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systemTable)
40*735f1daeSFredrik Holmqvist {
41*735f1daeSFredrik Holmqvist 	kSystemTable = systemTable;
42*735f1daeSFredrik Holmqvist 	kBootServices = systemTable->BootServices;
43*735f1daeSFredrik Holmqvist 	kRuntimeServices = systemTable->RuntimeServices;
44*735f1daeSFredrik Holmqvist 
45*735f1daeSFredrik Holmqvist 	call_ctors();
46*735f1daeSFredrik Holmqvist 
47*735f1daeSFredrik Holmqvist 	console_init();
48*735f1daeSFredrik Holmqvist 
49*735f1daeSFredrik Holmqvist 	printf("Hello from EFI Loader for Haiku!\nPress any key to continue...\n");
50*735f1daeSFredrik Holmqvist 	console_wait_for_key();
51*735f1daeSFredrik Holmqvist 
52*735f1daeSFredrik Holmqvist 	return EFI_SUCCESS;
53*735f1daeSFredrik Holmqvist }
54