/* * Copyright (c) 2022 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief EFI console driver * * @details EFI console driver. * Hooks into the printk and fputc (for printf) modules. */ #include #include #include #include extern int efi_console_putchar(int c); #if defined(CONFIG_PRINTK) || defined(CONFIG_STDOUT_CONSOLE) /** * * @brief Output one character to EFI console * * Outputs both line feed and carriage return in the case of a '\n'. * * @param c Character to output * * @return The character passed as input. */ static int console_out(int c) { return efi_console_putchar(c); } #endif #if defined(CONFIG_STDOUT_CONSOLE) extern void __stdout_hook_install(int (*hook)(int)); #endif #if defined(CONFIG_PRINTK) extern void __printk_hook_install(int (*fn)(int)); #endif /** * @brief Install printk/stdout hook for EFI console output */ static void efi_console_hook_install(void) { #if defined(CONFIG_STDOUT_CONSOLE) __stdout_hook_install(console_out); #endif #if defined(CONFIG_PRINTK) __printk_hook_install(console_out); #endif } /** * @brief Initialize one EFI as the console port * * @return 0 if successful, otherwise failed. */ static int efi_console_init(const struct device *arg) { ARG_UNUSED(arg); efi_console_hook_install(); return 0; } /* EFI console initializes */ SYS_INIT(efi_console_init, PRE_KERNEL_1, 0);