GnoCiYeH пре 1 година
родитељ
комит
f3b05a97ec
3 измењених фајлова са 15 додато и 12 уклоњено
  1. 9 0
      kernel/src/driver/tty/tty_core.rs
  2. 3 5
      kernel/src/libs/lib_ui/textui.rs
  3. 3 7
      kernel/src/libs/printk.rs

+ 9 - 0
kernel/src/driver/tty/tty_core.rs

@@ -4,6 +4,7 @@ use alloc::{string::String, sync::Arc, vec::Vec};
 use system_error::SystemError;
 
 use crate::{
+    driver::serial::serial8250::send_to_default_serial8250_port,
     libs::{
         rwlock::{RwLock, RwLockReadGuard, RwLockUpgradableGuard, RwLockWriteGuard},
         spinlock::{SpinLock, SpinLockGuard},
@@ -72,6 +73,13 @@ impl TtyCore {
         self.line_discipline.clone()
     }
 
+    pub fn write_without_serial(&self, buf: &[u8], nr: usize) -> Result<usize, SystemError> {
+        self.core
+            .driver()
+            .driver_funcs()
+            .write(self.core(), buf, nr)
+    }
+
     pub fn reopen(&self) -> Result<(), SystemError> {
         let tty_core = self.core();
         let driver = tty_core.driver();
@@ -404,6 +412,7 @@ impl TtyOperation for TtyCore {
 
     #[inline]
     fn write(&self, tty: &TtyCoreData, buf: &[u8], nr: usize) -> Result<usize, SystemError> {
+        send_to_default_serial8250_port(buf);
         return self.core().tty_driver.driver_funcs().write(tty, buf, nr);
     }
 

+ 3 - 5
kernel/src/libs/lib_ui/textui.rs

@@ -1,10 +1,7 @@
 use crate::{
     driver::{
         serial::serial8250::send_to_default_serial8250_port,
-        tty::{
-            tty_driver::TtyOperation, tty_port::TTY_PORTS,
-            virtual_terminal::virtual_console::CURRENT_VCNUM,
-        },
+        tty::{tty_port::TTY_PORTS, virtual_terminal::virtual_console::CURRENT_VCNUM},
         video::video_refresh_manager,
     },
     kdebug, kinfo,
@@ -1006,8 +1003,9 @@ pub extern "C" fn rs_textui_putchar(character: u8, fr_color: u32, bk_color: u32)
         let tty = port.port_data().tty();
         if tty.is_some() {
             let tty = tty.unwrap();
+            send_to_default_serial8250_port(&[character]);
             return tty
-                .write(tty.core(), buf.as_bytes(), buf.len())
+                .write_without_serial(buf.as_bytes(), buf.len())
                 .map(|_| 0)
                 .unwrap_or_else(|e| e.to_posix_errno());
         }

+ 3 - 7
kernel/src/libs/printk.rs

@@ -8,12 +8,9 @@ use alloc::string::ToString;
 use super::lib_ui::textui::{textui_putstr, FontColor};
 
 use crate::{
-    driver::{
-        serial::serial8250::send_to_default_serial8250_port,
-        tty::{
-            tty_driver::TtyOperation, tty_port::TTY_PORTS,
-            virtual_terminal::virtual_console::CURRENT_VCNUM,
-        },
+    driver::tty::{
+        tty_driver::TtyOperation, tty_port::TTY_PORTS,
+        virtual_terminal::virtual_console::CURRENT_VCNUM,
     },
     filesystem::procfs::{
         kmsg::KMSG,
@@ -109,7 +106,6 @@ impl PrintkWriter {
             if tty.is_some() {
                 let tty = tty.unwrap();
                 let _ = tty.write(tty.core(), s.as_bytes(), s.len());
-                send_to_default_serial8250_port(s.as_bytes());
             } else {
                 let _ = textui_putstr(s, FontColor::WHITE, FontColor::BLACK);
             }