diff --git a/Cargo.lock b/Cargo.lock index 2f2cd982..5e262953 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -138,15 +138,9 @@ checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "block-buffer" @@ -360,7 +354,7 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" dependencies = [ - "bitflags 2.9.4", + "bitflags", "objc2", ] @@ -451,7 +445,7 @@ version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddddbf932745a6be37109b6112d3ee09696106f848449069d3a57bba937ab82e" dependencies = [ - "bitflags 2.9.4", + "bitflags", "libc", "libgit2-sys", "log", @@ -639,7 +633,7 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" dependencies = [ - "bitflags 2.9.4", + "bitflags", "libc", "redox_syscall", ] @@ -774,7 +768,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" dependencies = [ - "bitflags 2.9.4", + "bitflags", "dispatch2", "objc2", ] @@ -791,7 +785,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.9.4", + "bitflags", "objc2", ] @@ -931,22 +925,13 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "raw-cpuid" -version = "10.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" dependencies = [ - "bitflags 2.9.4", + "bitflags", ] [[package]] @@ -979,7 +964,7 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" dependencies = [ - "bitflags 2.9.4", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -1194,7 +1179,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "715f9a4586706a61c571cb5ee1c3ac2bbb2cf63e15bce772307b95befef5f5ee" dependencies = [ - "bitflags 2.9.4", + "bitflags", "log", "num-traits", ] @@ -1262,13 +1247,11 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "uart_16550" -version = "0.4.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d293f51425981fdb1b766beae254dbb711a17e8c4b549dc69b9b7ee0d478d5" +checksum = "f9c24d1751f909d9e2d192475ca5527964e13dbc3126ce20c288dfa8f3a3e734" dependencies = [ - "bitflags 2.9.4", - "rustversion", - "x86", + "bitflags", ] [[package]] @@ -1286,7 +1269,7 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a58ad7512f7c38b58aa536c3839dbb1d5a122d14a7e2245b06ded49edcb7585a" dependencies = [ - "bitflags 2.9.4", + "bitflags", "cfg-if", "log", "ptr_meta", @@ -1314,7 +1297,7 @@ version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a36f49db0b04a8dfd246a26ddf8d2526a2ffd8cf946ae7fe603fd0c5fbd2786" dependencies = [ - "bitflags 2.9.4", + "bitflags", "uguid", ] @@ -1796,17 +1779,6 @@ version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" -[[package]] -name = "x86" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2781db97787217ad2a2845c396a5efe286f87467a5810836db6d74926e94a385" -dependencies = [ - "bit_field", - "bitflags 1.3.2", - "raw-cpuid", -] - [[package]] name = "x86_64" version = "0.15.5" @@ -1814,7 +1786,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be4ec631e1a81d50e46c35a4a00322bd076c47491b64c2fb10a7ffa89002c697" dependencies = [ "bit_field", - "bitflags 2.9.4", + "bitflags", "const_fn", "rustversion", "volatile 0.4.6", diff --git a/Cargo.toml b/Cargo.toml index b436864f..c9f7cf11 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,7 +38,7 @@ sbi-rt = "0.0.3" [target.'cfg(target_arch = "x86_64")'.dependencies] linux-boot-params = { version = "0.18", optional = true } multiboot = { version = "0.8", optional = true } -uart_16550 = "0.4" +uart_16550 = "0.8" x86_64 = { version = "0.15", default-features = false, features = ["instructions"] } [target.'cfg(target_os = "uefi")'.dependencies] diff --git a/src/arch/x86_64/console.rs b/src/arch/x86_64/console.rs index 9642c225..dc6e3705 100644 --- a/src/arch/x86_64/console.rs +++ b/src/arch/x86_64/console.rs @@ -1,21 +1,25 @@ -use uart_16550::SerialPort; +use uart_16550::backend::PioBackend; +use uart_16550::{Config, Uart16550}; pub struct Console { - serial_port: SerialPort, + uart: Uart16550, } impl Console { pub fn write_bytes(&mut self, bytes: &[u8]) { - for byte in bytes.iter().copied() { - self.serial_port.send(byte); - } + self.uart.send_bytes_exact(bytes); } } impl Default for Console { fn default() -> Self { - let mut serial_port = unsafe { SerialPort::new(0x3F8) }; - serial_port.init(); - Self { serial_port } + let base_port = 0x3f8; + let mut uart = unsafe { Uart16550::new_port(base_port).unwrap() }; + uart.init(Config::default()).ok(); + // Once we have a fallback destination for output, + // we should log any error above and run + // `test_loopback` and `check_connected` here. + + Self { uart } } }