| -- 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 |
| |
| function console_log_level |
| (msg_level : Interfaces.C.int) |
| return Interfaces.C.int; |
| pragma Import (C, console_log_level, "console_log_level"); |
| |
| 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 |
| console_log : constant Interfaces.C.int := |
| console_log_level (Msg_Level_BIOS_DEBUG); |
| begin |
| 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 |
| console_log : constant Interfaces.C.int := |
| console_log_level (Msg_Level_BIOS_DEBUG); |
| begin |
| 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; |
| |
| procedure New_Line is |
| begin |
| Put_Char (Character'Val (16#0a#)); |
| end New_Line; |
| |
| end HW.Debug_Sink; |