/* SPDX-License-Identifier: GPL-2.0-only */ #include #include #include #include #include #include #include #include #include #include #include #include #include /* Note: when adding a new console, make sure you update the definition of HAS_ONLY_FAST_CONSOLES in ! */ void console_hw_init(void) { __cbmemc_init(); __spkmodem_init(); __qemu_debugcon_init(); __uart_init(); __ne2k_init(); __usbdebug_init(); __spiconsole_init(); __flashconsole_init(); __system76_ec_init(); __i2c_smbus_console_init(); __simnow_console_init(); } void console_interactive_tx_byte(unsigned char byte, void *data_unused) { if (byte == '\n') { /* Some consoles want newline conversion to keep terminals happy. */ __uart_tx_byte('\r'); __usb_tx_byte('\r'); __i2c_smbus_console_tx_byte('\r'); } __spkmodem_tx_byte(byte); __qemu_debugcon_tx_byte(byte); __uart_tx_byte(byte); __ne2k_tx_byte(byte); __usb_tx_byte(byte); __spiconsole_tx_byte(byte); __system76_ec_tx_byte(byte); __i2c_smbus_console_tx_byte(byte); __simnow_console_tx_byte(byte); } void console_stored_tx_byte(unsigned char byte, void *data_unused) { __flashconsole_tx_byte(byte); __cbmemc_tx_byte(byte); } void console_tx_byte(unsigned char byte) { console_interactive_tx_byte(byte, NULL); console_stored_tx_byte(byte, NULL); } void console_tx_flush(void) { __uart_tx_flush(); __ne2k_tx_flush(); __usb_tx_flush(); __flashconsole_tx_flush(); __system76_ec_tx_flush(); } void console_write_line(uint8_t *buffer, size_t number_of_bytes) { /* Finish displaying all of the console data if requested */ if (number_of_bytes == 0) { console_tx_flush(); return; } /* Output the console data */ while (number_of_bytes--) console_tx_byte(*buffer++); } #if CONFIG(GDB_STUB) && (ENV_ROMSTAGE_OR_BEFORE || ENV_RAMSTAGE) void gdb_hw_init(void) { __gdb_hw_init(); } void gdb_tx_byte(unsigned char byte) { __gdb_tx_byte(byte); } void gdb_tx_flush(void) { __gdb_tx_flush(); } unsigned char gdb_rx_byte(void) { return __gdb_rx_byte(); } #endif