console.rs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. macro_rules! println_trace {
  60. ($feat:literal) => {
  61. #[deny(unexpected_cfgs)]
  62. {
  63. #[cfg(feature = $feat)]
  64. $crate::println!("[kernel:trace] ")
  65. }
  66. };
  67. ($feat:literal, $($arg:tt)*) => {{
  68. #[deny(unexpected_cfgs)]
  69. {
  70. #[cfg(feature = $feat)]
  71. $crate::println!("[kernel:trace] {}", format_args!($($arg)*))
  72. }
  73. }};
  74. }
  75. use super::{constants::EEXIST, terminal::Terminal};
  76. pub(crate) use {
  77. print, println, println_debug, println_fatal, println_info, println_trace, println_warn,
  78. };