diff options
| author | salmonik <salmonik@tuta.io> | 2026-08-17 14:53:52 +0200 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-08-17 14:53:52 +0200 |
| commit | be868a43185826b02bf6d091019bb779678525bb (patch) | |
| tree | 586988c15f1d700b1621c7f0208584b30878a56c /rsnix/src/klog.rs | |
| parent | v0.5.10: change em-dashes to dashes (diff) | |
| download | rs-dos-be868a43185826b02bf6d091019bb779678525bb.tar.gz rs-dos-be868a43185826b02bf6d091019bb779678525bb.zip | |
USB2/1.1 (EHCI/UHCI) drivers + real-hardware bring-up hardening
- Add polled EHCI (USB2) and UHCI (USB1.1) host-controller drivers with
HID boot mouse support, wired into cursor polling and the 'usb' shell cmd
- Add USB Legacy ownership handoff (claim_usb_legacy) plus config_write_byte
- Harden boot: verify the PIT/timer ticks before shell entry, EOI stray
interrupts in the LAPIC to stop interrupt storms, bound PS/2 controller
waits, and INTx-disable AHCI (polled driver)
- Add boot stage markers, klog screen echo, and QR lock; scheduler
mark_shell_running; NO_USB stopgap to keep BIOS USB-Legacy input alive
- alloc_pages_above for DMA buffers that must avoid low conventional memory
- Expand DEBUG_NOTES with EHCI/QEMU bring-up findings
Diffstat (limited to 'rsnix/src/klog.rs')
| -rw-r--r-- | rsnix/src/klog.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/rsnix/src/klog.rs b/rsnix/src/klog.rs index 2e1fc82..300a597 100644 --- a/rsnix/src/klog.rs +++ b/rsnix/src/klog.rs | |||
| @@ -95,6 +95,16 @@ pub fn emit(args: core::fmt::Arguments<'_>) { | |||
| 95 | crate::serial::write_raw(line.as_str()); | 95 | crate::serial::write_raw(line.as_str()); |
| 96 | crate::serial::write_raw("\r\n"); | 96 | crate::serial::write_raw("\r\n"); |
| 97 | append(line.as_str(), ms); | 97 | append(line.as_str(), ms); |
| 98 | // Screen echo: mirror the serial line to the VGA console, so the whole | ||
| 99 | // boot log is visible on real hardware without a serial console. The | ||
| 100 | // last line on screen when the machine freezes is exactly where boot | ||
| 101 | // stopped (far more precise than the stage marker). Skipped while a | ||
| 102 | // fault dump is rendering its own band (row 0 = boot marker, terminal | ||
| 103 | // lives below it). | ||
| 104 | if crate::vt::ready() && !crate::interrupts::in_dump() && !crate::gop::qr_locked() { | ||
| 105 | crate::vt::write_str(line.as_str()); | ||
| 106 | crate::vt::write_str("\n"); | ||
| 107 | } | ||
| 98 | crate::sched::unlock(); | 108 | crate::sched::unlock(); |
| 99 | } | 109 | } |
| 100 | 110 | ||
