diff options
Diffstat (limited to 'src/console')
-rw-r--r-- | src/console/hw-debug_sink.adb | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/console/hw-debug_sink.adb b/src/console/hw-debug_sink.adb index f30b73f4ce..6a2889de8f 100644 --- a/src/console/hw-debug_sink.adb +++ b/src/console/hw-debug_sink.adb @@ -1,7 +1,9 @@ -- SPDX-License-Identifier: GPL-2.0-only with Interfaces.C; +with CB.Config; +use CB; use type Interfaces.C.int; package body HW.Debug_Sink is @@ -13,21 +15,43 @@ package body HW.Debug_Sink is Msg_Level_BIOS_DEBUG : constant := 7; + CONSOLE_LOG_FAST : constant := 1; + CONSOLE_LOG_ALL : constant := 2; + + procedure cbmemc_tx_byte (chr : Interfaces.C.char); + pragma Import (C, cbmemc_tx_byte, "cbmemc_tx_byte"); + procedure console_tx_byte (chr : Interfaces.C.char); pragma Import (C, console_tx_byte, "console_tx_byte"); - procedure Put (Item : String) is + procedure Put (Item : String) + is + console_log : constant Interfaces.C.int := + console_log_level (Msg_Level_BIOS_DEBUG); begin - if console_log_level (Msg_Level_BIOS_DEBUG) /= 0 then + if console_log = CONSOLE_LOG_FAST then + if Config.CONSOLE_CBMEM then + for Idx in Item'Range loop + cbmemc_tx_byte (Interfaces.C.To_C (Item (Idx))); + end loop; + end if; + elsif console_log = CONSOLE_LOG_ALL then for Idx in Item'Range loop console_tx_byte (Interfaces.C.To_C (Item (Idx))); end loop; end if; end Put; - procedure Put_Char (Item : Character) is + procedure Put_Char (Item : Character) + is + console_log : constant Interfaces.C.int := + console_log_level (Msg_Level_BIOS_DEBUG); begin - if console_log_level (Msg_Level_BIOS_DEBUG) /= 0 then + if console_log = CONSOLE_LOG_FAST then + if Config.CONSOLE_CBMEM then + cbmemc_tx_byte (Interfaces.C.To_C (Item)); + end if; + elsif console_log = CONSOLE_LOG_ALL then console_tx_byte (Interfaces.C.To_C (Item)); end if; end Put_Char; |