xref: /aosp_15_r20/external/coreboot/src/console/hw-debug_sink.adb (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1-- SPDX-License-Identifier: GPL-2.0-only
2
3with Interfaces.C;
4with CB.Config;
5
6use CB;
7use type Interfaces.C.int;
8
9package body HW.Debug_Sink is
10
11   function console_log_level
12     (msg_level : Interfaces.C.int)
13      return Interfaces.C.int;
14   pragma Import (C, console_log_level, "console_log_level");
15
16   Msg_Level_BIOS_DEBUG : constant := 7;
17
18   CONSOLE_LOG_FAST  : constant := 1;
19   CONSOLE_LOG_ALL   : constant := 2;
20
21   procedure cbmemc_tx_byte (chr : Interfaces.C.char);
22   pragma Import (C, cbmemc_tx_byte, "cbmemc_tx_byte");
23
24   procedure console_tx_byte (chr : Interfaces.C.char);
25   pragma Import (C, console_tx_byte, "console_tx_byte");
26
27   procedure Put (Item : String)
28   is
29      console_log : constant Interfaces.C.int :=
30         console_log_level (Msg_Level_BIOS_DEBUG);
31   begin
32      if console_log = CONSOLE_LOG_FAST then
33         if Config.CONSOLE_CBMEM then
34            for Idx in Item'Range loop
35               cbmemc_tx_byte (Interfaces.C.To_C (Item (Idx)));
36            end loop;
37         end if;
38      elsif console_log = CONSOLE_LOG_ALL then
39         for Idx in Item'Range loop
40            console_tx_byte (Interfaces.C.To_C (Item (Idx)));
41         end loop;
42      end if;
43   end Put;
44
45   procedure Put_Char (Item : Character)
46   is
47      console_log : constant Interfaces.C.int :=
48         console_log_level (Msg_Level_BIOS_DEBUG);
49   begin
50      if console_log = CONSOLE_LOG_FAST then
51         if Config.CONSOLE_CBMEM then
52            cbmemc_tx_byte (Interfaces.C.To_C (Item));
53         end if;
54      elsif console_log = CONSOLE_LOG_ALL then
55         console_tx_byte (Interfaces.C.To_C (Item));
56      end if;
57   end Put_Char;
58
59   procedure New_Line is
60   begin
61      Put_Char (Character'Val (16#0a#));
62   end New_Line;
63
64end HW.Debug_Sink;
65