console: Ensure only 1 console exists at a time

Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
diff --git a/src/console.rs b/src/console.rs
index c13fb26..4d6e80a 100644
--- a/src/console.rs
+++ b/src/console.rs
@@ -41,8 +41,14 @@
     allow_buffer: [u8; 64],
 }
 
-pub fn get_global_console() -> Option<&'static mut Console> {
-    unsafe { CONSOLE.as_mut() }
+pub fn get_global_console() -> Option<Console> {
+    unsafe {
+        if let Some(con) = CONSOLE.take() {
+            Some(con)
+        } else {
+            None
+        }
+    }
 }
 
 impl Console {
@@ -83,7 +89,7 @@
         Ok(())
     }
 
-    fn set_global_console(self) {
+    pub fn set_global_console(self) {
         unsafe {
             CONSOLE = Some(self);
         }
@@ -103,15 +109,17 @@
         println!("")
     });
     ($msg:expr) => ({
-        if let Some(console) = $crate::console::get_global_console() {
+        if let Some(mut console) = $crate::console::get_global_console() {
             use core::fmt::Write;
             let _ = writeln!(console, $msg);
+            console.set_global_console();
         }
     });
     ($fmt:expr, $($arg:tt)+) => ({
-        if let Some(console) = $crate::console::get_global_console() {
+        if let Some(mut console) = $crate::console::get_global_console() {
             use core::fmt::Write;
             let _ = writeln!(console, "{}", format_args!($fmt, $($arg)+));
+            console.set_global_console();
         }
     });
 }
@@ -123,15 +131,17 @@
         print!("")
     });
     ($msg:expr) => ({
-        if let Some(console) = $crate::console::get_global_console() {
+        if let Some(mut console) = $crate::console::get_global_console() {
             use core::fmt::Write;
             let _ =  write!(console, $msg);
+            console.set_global_console();
         }
     });
     ($fmt:expr, $($arg:tt)+) => ({
-        if let Some(console) = $crate::console::get_global_console() {
+        if let Some(mut console) = $crate::console::get_global_console() {
             use core::fmt::Write;
             let _ = write!(console, "{}", format_args!($fmt, $($arg)+));
+            console.set_global_console();
         }
     });
 }