xref: /haiku/src/system/boot/platform/efi/start.cpp (revision e2e1558a02e410c6c54b62014b2df6096a6f7949)
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