sbi_console.rs 871 B

123456789101112131415161718192021222324252627282930313233
  1. use crate::kernel::{block::make_device, CharDevice, CharDeviceType, Terminal, TerminalDevice};
  2. use alloc::sync::Arc;
  3. use eonix_log::ConsoleWrite;
  4. struct SbiConsole;
  5. impl ConsoleWrite for SbiConsole {
  6. fn write(&self, s: &str) {
  7. eonix_hal::bootstrap::early_console_write(s);
  8. }
  9. }
  10. impl TerminalDevice for SbiConsole {
  11. fn write(&self, data: &[u8]) {
  12. for &ch in data {
  13. eonix_hal::bootstrap::early_console_putchar(ch);
  14. }
  15. }
  16. fn write_direct(&self, data: &[u8]) {
  17. for &ch in data {
  18. eonix_hal::bootstrap::early_console_putchar(ch);
  19. }
  20. }
  21. }
  22. pub fn init_console() {
  23. eonix_log::set_console(Arc::new(SbiConsole));
  24. let console = Arc::new(SbiConsole);
  25. let terminal = Terminal::new(console.clone());
  26. crate::kernel::console::set_console(terminal).expect("Failed to set console");
  27. }