From 1ad90ce1813cf9f7de60de9834999ce7b7c08734 Mon Sep 17 00:00:00 2001
From: Mark Poliakov <mark@alnyan.me>
Date: Tue, 10 Dec 2024 13:02:36 +0200
Subject: [PATCH] x86: add puts() impl to com-port

---
 kernel/src/arch/x86/peripherals/serial.rs | 25 +++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/kernel/src/arch/x86/peripherals/serial.rs b/kernel/src/arch/x86/peripherals/serial.rs
index 500b07c3..b7a021a0 100644
--- a/kernel/src/arch/x86/peripherals/serial.rs
+++ b/kernel/src/arch/x86/peripherals/serial.rs
@@ -31,22 +31,35 @@ impl DebugSink for Port {
         self.send_byte(c)
     }
 
+    fn puts(&self, s: &str) -> Result<(), Error> {
+        let mut inner = self.inner.lock();
+        for b in s.bytes() {
+            inner.write(b)?;
+        }
+        Ok(())
+    }
+
     fn supports_control_sequences(&self) -> bool {
         true
     }
 }
 
-impl SerialDevice for Port {
-    fn send_byte(&self, byte: u8) -> Result<(), Error> {
-        let inner = self.inner.lock();
-
-        while inner.lsr.read() & Self::LSR_THRE == 0 {
+impl Inner {
+    fn write(&mut self, byte: u8) -> Result<(), Error> {
+        while self.lsr.read() & Port::LSR_THRE == 0 {
             core::hint::spin_loop();
         }
 
-        inner.dr.write(byte);
+        self.dr.write(byte);
         Ok(())
     }
+}
+
+impl SerialDevice for Port {
+    fn send_byte(&self, byte: u8) -> Result<(), Error> {
+        let mut inner = self.inner.lock();
+        inner.write(byte)
+    }
 
     fn is_terminal(&self) -> bool {
         false