diff --git a/xtldr2/CMakeLists.txt b/xtldr2/CMakeLists.txt index 084d603..3da0dc2 100644 --- a/xtldr2/CMakeLists.txt +++ b/xtldr2/CMakeLists.txt @@ -8,6 +8,7 @@ include_directories( # Specify list of source code files list(APPEND XTLDR_SOURCE + ${XTLDR_SOURCE_DIR}/console.c ${XTLDR_SOURCE_DIR}/globals.c ${XTLDR_SOURCE_DIR}/xtldr.c) diff --git a/xtldr2/console.c b/xtldr2/console.c new file mode 100644 index 0000000..0bf55d1 --- /dev/null +++ b/xtldr2/console.c @@ -0,0 +1,48 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtldr/console.c + * DESCRIPTION: EFI console support + * DEVELOPERS: Rafal Kupiec + */ + +#include + + +/** + * This routine clears the UEFI console screen. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTCDECL +VOID +BmClearScreen() +{ + /* Clear screen */ + EfiSystemTable->ConOut->ClearScreen(EfiSystemTable->ConOut); +} + +/** + * This routine initializes the EFI console. + * + * @return This routine returns status code. + * + * @since XT 1.0 + */ +XTCDECL +VOID +BmInitializeConsole() +{ + /* Clear console buffers */ + EfiSystemTable->ConIn->Reset(EfiSystemTable->ConIn, TRUE); + EfiSystemTable->ConOut->Reset(EfiSystemTable->ConOut, TRUE); + EfiSystemTable->StdErr->Reset(EfiSystemTable->StdErr, TRUE); + + /* Clear screen */ + BmClearScreen(); + + /* Enable cursor */ + EfiSystemTable->ConOut->EnableCursor(EfiSystemTable->ConOut, TRUE); +} diff --git a/xtldr2/includes/xtbm.h b/xtldr2/includes/xtbm.h index 252d1e2..d3fe630 100644 --- a/xtldr2/includes/xtbm.h +++ b/xtldr2/includes/xtbm.h @@ -21,6 +21,14 @@ EXTERN PEFI_SYSTEM_TABLE EfiSystemTable; /* XTLDR routines forward references */ +XTCDECL +VOID +BmClearScreen(); + +XTCDECL +VOID +BmInitializeConsole(); + XTCDECL EFI_STATUS BmStartXtLoader(IN EFI_HANDLE ImageHandle, diff --git a/xtldr2/xtldr.c b/xtldr2/xtldr.c index 5c1df65..22ac4cb 100644 --- a/xtldr2/xtldr.c +++ b/xtldr2/xtldr.c @@ -33,6 +33,9 @@ BmStartXtLoader(IN EFI_HANDLE ImageHandle, EfiImageHandle = ImageHandle; EfiSystemTable = SystemTable; + /* Initialize UEFI console */ + BmInitializeConsole(); + /* This point should be never reached, if this happen return error code */ return STATUS_EFI_LOAD_ERROR; }