summaryrefslogtreecommitdiff
path: root/kernel/src/io/serial.rs
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2019-11-03 01:22:02 +0100
committerDennis Kobert <dennis@kobert.dev>2019-11-03 01:22:02 +0100
commitb47731c6fd99d80b1023d906dd4b3bb377e49438 (patch)
tree0777c9eef5c416b5e58e1c44ded42d7b53382c57 /kernel/src/io/serial.rs
parent41bff6a115b9625747f08651aa8209c6767254da (diff)
Merge: 41bff6a a2d6311
Diffstat (limited to 'kernel/src/io/serial.rs')
-rw-r--r--kernel/src/io/serial.rs25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/src/io/serial.rs b/kernel/src/io/serial.rs
new file mode 100644
index 0000000..e1d4660
--- /dev/null
+++ b/kernel/src/io/serial.rs
@@ -0,0 +1,25 @@
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+#[repr(u32)]
+pub enum QemuExitCode {
+ Success = 0x10, // The actual exit code is (value << 1) | 1.
+ Failed = 0x11,
+}
+
+pub fn exit_qemu(exit_code: QemuExitCode) {
+ use x86_64::instructions::port::Port;
+
+ unsafe {
+ let mut port = Port::new(0xf4);
+ port.write(exit_code as u32);
+ }
+}
+
+fn trivial_assertion() {
+ use crate::io::vga_text::OStream;
+ let mut stdout = OStream::new();
+ stdout.clear();
+
+ stdout.print(b"trivial assertion... ");
+ assert_eq!(0, 1);
+ stdout.print(b"[ok]");
+}