console.rs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. use crate::prelude::*;
  2. use alloc::sync::Arc;
  3. static CONSOLE: Spin<Option<Arc<Terminal>>> = Spin::new(None);
  4. pub fn set_console(terminal: Arc<Terminal>) -> KResult<()> {
  5. let mut console = CONSOLE.lock();
  6. if console.is_none() {
  7. *console = Some(terminal);
  8. Ok(())
  9. } else {
  10. Err(EEXIST)
  11. }
  12. }
  13. pub fn get_console() -> Option<Arc<Terminal>> {
  14. let console = CONSOLE.lock();
  15. console.clone()
  16. }
  17. #[doc(hidden)]
  18. pub fn _print(args: core::fmt::Arguments) {
  19. // TODO!!!!!!!!!!!!!: REMOVE THIS AND USE `eonix_log`.
  20. eonix_log::do_print(args);
  21. }
  22. macro_rules! print {
  23. ($($arg:tt)*) => {
  24. $crate::kernel::console::_print(format_args!($($arg)*))
  25. };
  26. }
  27. macro_rules! println {
  28. () => {
  29. $crate::print!("\n")
  30. };
  31. ($($arg:tt)*) => {
  32. $crate::print!("{}\n", format_args!($($arg)*))
  33. };
  34. }
  35. macro_rules! println_warn {
  36. ($($arg:tt)*) => {
  37. $crate::println!("[kernel: warn] {}", format_args!($($arg)*))
  38. };
  39. }
  40. macro_rules! println_debug {
  41. ($($arg:tt)*) => {
  42. $crate::println!("[kernel:debug] {}", format_args!($($arg)*))
  43. };
  44. }
  45. #[allow(unused_macros)]
  46. macro_rules! println_info {
  47. ($($arg:tt)*) => {
  48. $crate::println!("[kernel: info] {}", format_args!($($arg)*))
  49. };
  50. }
  51. macro_rules! println_fatal {
  52. () => {
  53. $crate::println!("[kernel:fatal] ")
  54. };
  55. ($($arg:tt)*) => {
  56. $crate::println!("[kernel:fatal] {}", format_args!($($arg)*))
  57. };
  58. }
  59. #[allow(unused_macros)]
  60. macro_rules! println_trace {
  61. ($feat:literal) => {
  62. #[deny(unexpected_cfgs)]
  63. {
  64. #[cfg(feature = $feat)]
  65. $crate::println!("[kernel:trace] ")
  66. }
  67. };
  68. ($feat:literal, $($arg:tt)*) => {{
  69. #[deny(unexpected_cfgs)]
  70. {
  71. #[cfg(feature = $feat)]
  72. $crate::println!("[kernel:trace] {}", format_args!($($arg)*))
  73. }
  74. }};
  75. }
  76. use super::{constants::EEXIST, terminal::Terminal};
  77. pub(crate) use {
  78. print, println, println_debug, println_fatal, println_info, println_trace, println_warn,
  79. };