console.rs 2.1 KB

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