EFI: stub functions so we can call loader's main() function.

This commit is contained in:
Jessica Hamilton
2016-09-02 19:02:33 +12:00
parent 495efc382b
commit e2e1558a02
10 changed files with 263 additions and 12 deletions
+1 -1
View File
@@ -419,7 +419,7 @@ rule KernelArchitectureSetup architecture
-maccumulate-outgoing-args -Wno-error=unused-variable ; -maccumulate-outgoing-args -Wno-error=unused-variable ;
HAIKU_BOOT_C++FLAGS += -fpic -fno-stack-protector -fPIC -fshort-wchar -mno-red-zone HAIKU_BOOT_C++FLAGS += -fpic -fno-stack-protector -fPIC -fshort-wchar -mno-red-zone
-maccumulate-outgoing-args -Wno-error=unused-variable ; -maccumulate-outgoing-args -Wno-error=unused-variable ;
HAIKU_BOOT_LDFLAGS = -Bstatic -Bsymbolic -shared -nostdlib -znocombreloc -nostartfiles ; HAIKU_BOOT_LDFLAGS = -Bstatic -Bsymbolic -shared -nostdlib -znocombreloc -nostartfiles -no-undefined ;
} else { } else {
HAIKU_BOOT_CCFLAGS += -fno-pic ; HAIKU_BOOT_CCFLAGS += -fno-pic ;
HAIKU_BOOT_C++FLAGS += -fno-pic ; HAIKU_BOOT_C++FLAGS += -fno-pic ;
+12 -3
View File
@@ -20,6 +20,12 @@ local platform_src =
relocation_func.cpp relocation_func.cpp
start.cpp start.cpp
console.cpp console.cpp
video.cpp
debug.cpp
mmu.cpp
heap.cpp
menu.cpp
devices.cpp
; ;
Includes [ FGristFiles $(efi_glue_src) $(platform_src) ] Includes [ FGristFiles $(efi_glue_src) $(platform_src) ]
@@ -36,6 +42,9 @@ BootMergeObject boot_platform_efi.o :
: boot_platform_generic.a : boot_platform_generic.a
; ;
SEARCH on [ FGristFiles relocation_func.cpp ] = [ FDirName $(SUBDIR) arch $(TARGET_ARCH) ] ; SEARCH on [ FGristFiles relocation_func.cpp ]
LOCATE on [ FGristFiles $(efi_glue_src) ] = [ BuildFeatureAttribute gnuefi : libdir : path ] ; = [ FDirName $(SUBDIR) arch $(TARGET_ARCH) ] ;
Depends [ FGristFiles $(efi_glue_src) ] : [ BuildFeatureAttribute gnuefi : libdir ] ; LOCATE on [ FGristFiles $(efi_glue_src) ]
= [ BuildFeatureAttribute gnuefi : libdir : path ] ;
Depends [ FGristFiles $(efi_glue_src) ]
: [ BuildFeatureAttribute gnuefi : libdir ] ;
+10 -5
View File
@@ -1,6 +1,7 @@
/* /*
* Copyright 2014-2016 Haiku, Inc. All rights reserved. * Copyright 2014-2016 Haiku, Inc. All rights reserved.
* Copyright 2013 Fredrik Holmqvist, [email protected]. All rights reserved. * Copyright 2013 Fredrik Holmqvist, [email protected]. All rights
* reserved.
* Distributed under the terms of the MIT License. * Distributed under the terms of the MIT License.
*/ */
@@ -22,8 +23,10 @@ class Console : public ConsoleNode {
public: public:
Console(); Console();
virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize); virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer,
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer, size_t bufferSize); size_t bufferSize);
virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer,
size_t bufferSize);
}; };
@@ -51,7 +54,8 @@ Console::ReadAt(void *cookie, off_t pos, void *buffer, size_t bufferSize)
ssize_t ssize_t
Console::WriteAt(void *cookie, off_t /*pos*/, const void *buffer, size_t bufferSize) Console::WriteAt(void *cookie, off_t /*pos*/, const void *buffer,
size_t bufferSize)
{ {
const char *string = (const char *)buffer; const char *string = (const char *)buffer;
CHAR16 ucsBuffer[bufferSize + 3]; CHAR16 ucsBuffer[bufferSize + 3];
@@ -67,7 +71,8 @@ Console::WriteAt(void *cookie, off_t /*pos*/, const void *buffer, size_t bufferS
//Not sure if we should keep going or abort for 0. //Not sure if we should keep going or abort for 0.
//Keep going was easy anyway. //Keep going was easy anyway.
ucsBuffer[j] = 0; ucsBuffer[j] = 0;
kSystemTable->ConOut->OutputString(kSystemTable->ConOut, ucsBuffer); kSystemTable->ConOut->OutputString(kSystemTable->ConOut,
ucsBuffer);
j = 0; j = 0;
continue; continue;
} }
+44
View File
@@ -0,0 +1,44 @@
/*
* Copyright 2016 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <string.h>
#include <boot/platform.h>
#include <boot/stage2.h>
#include <boot/stdio.h>
#include "efi_platform.h"
extern "C" void
dprintf(const char *format, ...)
{
}
extern "C" void
panic(const char *format, ...)
{
va_list args;
platform_switch_to_text_mode();
puts("*** PANIC ***");
va_start(args, format);
vprintf(format, args);
va_end(args);
while (true)
kBootServices->Stall(1000000);
}
char*
platform_debug_get_log_buffer(size_t *_size)
{
return NULL;
}
+39
View File
@@ -0,0 +1,39 @@
/*
* Copyright 2016 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <boot/platform.h>
#include <boot/stage2.h>
status_t
platform_add_boot_device(struct stage2_args *args, NodeList *devicesList)
{
return B_ERROR;
}
status_t
platform_add_block_devices(struct stage2_args *args, NodeList *devicesList)
{
return B_ERROR;
}
status_t
platform_get_boot_partition(struct stage2_args *args, Node *bootDevice,
NodeList *partitions, boot::Partition **_partition)
{
panic("platform_get_boot_partition not implemented");
return B_ERROR;
}
status_t
platform_register_boot_device(Node *device)
{
panic("platform_register_boot_device not implemented");
return B_ERROR;
}
+22
View File
@@ -0,0 +1,22 @@
/*
* Copyright 2016 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <boot/platform.h>
#include <boot/stage2.h>
extern "C" void
platform_release_heap(struct stage2_args *args, void *base)
{
return;
}
extern "C" status_t
platform_init_heap(struct stage2_args *args, void **_base, void **_top)
{
return B_ERROR;
}
+40
View File
@@ -0,0 +1,40 @@
/*
* Copyright 2016 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <boot/menu.h>
#include <boot/platform/generic/text_menu.h>
#include "efi_platform.h"
void
platform_add_menus(Menu *menu)
{
// No platform specific menus
}
void
platform_update_menu_item(Menu *menu, MenuItem *item)
{
platform_generic_update_text_menu_item(menu, item);
}
void
platform_run_menu(Menu *menu)
{
platform_generic_run_text_menu(menu);
}
size_t
platform_get_user_input_text(Menu *menu, MenuItem *item, char *buffer,
size_t bufferSize)
{
return platform_generic_get_user_input_text(menu, item, buffer,
bufferSize);
}
+25
View File
@@ -0,0 +1,25 @@
/*
* Copyright 2016 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <boot/platform.h>
#include <boot/stage2.h>
extern "C" status_t
platform_allocate_region(void **_virtualAddress, size_t size, uint8 protection,
bool exactAddress)
{
panic("platform_allocate_region not implemented");
return B_ERROR;
}
extern "C" status_t
platform_free_region(void *address, size_t size)
{
panic("platform_free_region not implemented");
return B_ERROR;
}
+29 -3
View File
@@ -5,7 +5,9 @@
*/ */
#include <stdio.h> #include <boot/platform.h>
#include <boot/stage2.h>
#include <boot/stdio.h>
#include "console.h" #include "console.h"
#include "efi_platform.h" #include "efi_platform.h"
@@ -30,6 +32,27 @@ call_ctors(void)
} }
extern "C" uint32
platform_boot_options()
{
return 0;
}
extern "C" void
platform_start_kernel(void)
{
panic("platform_start_kernel not implemented");
}
extern "C" void
platform_exit(void)
{
return;
}
/** /**
* efi_main - The entry point for the EFI application * efi_main - The entry point for the EFI application
* @image: firmware-allocated handle that identifies the image * @image: firmware-allocated handle that identifies the image
@@ -38,16 +61,19 @@ call_ctors(void)
extern "C" EFI_STATUS extern "C" EFI_STATUS
efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systemTable) efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systemTable)
{ {
stage2_args args;
kSystemTable = systemTable; kSystemTable = systemTable;
kBootServices = systemTable->BootServices; kBootServices = systemTable->BootServices;
kRuntimeServices = systemTable->RuntimeServices; kRuntimeServices = systemTable->RuntimeServices;
memset(&args, 0, sizeof(stage2_args));
call_ctors(); call_ctors();
console_init(); console_init();
printf("Hello from EFI Loader for Haiku!\nPress any key to continue...\n"); main(&args);
console_wait_for_key();
return EFI_SUCCESS; return EFI_SUCCESS;
} }
+41
View File
@@ -0,0 +1,41 @@
/*
* Copyright 2016, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*/
#include <boot/platform.h>
#include <boot/platform/generic/video.h>
#include "efi_platform.h"
extern "C" status_t
platform_init_video(void)
{
return B_ERROR;
}
extern "C" void
platform_switch_to_logo(void)
{
}
extern "C" void
platform_blit4(addr_t frameBuffer, const uint8 *data,
uint16 width, uint16 height, uint16 imageWidth,
uint16 left, uint16 top)
{
panic("platform_blit4 unsupported");
return;
}
extern "C" void
platform_set_palette(const uint8 *palette)
{
panic("platform_set_palette unsupported");
return;
}