summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
Diffstat (limited to 'shell')
-rw-r--r--shell/src/lib.rs38
1 files changed, 37 insertions, 1 deletions
diff --git a/shell/src/lib.rs b/shell/src/lib.rs
index 5cab122..500eaae 100644
--- a/shell/src/lib.rs
+++ b/shell/src/lib.rs
@@ -50,6 +50,8 @@ pub fn run() -> ! {
50 "mem" => cmd_mem(), 50 "mem" => cmd_mem(),
51 "mmap" => cmd_mmap(), 51 "mmap" => cmd_mmap(),
52 "stress" => cmd_stress(args), 52 "stress" => cmd_stress(args),
53 "date" => cmd_date(),
54 "pci" => cmd_pci(),
53 _ => { 55 _ => {
54 gop_println!("unknown command: {}", cmd); 56 gop_println!("unknown command: {}", cmd);
55 serial_println!("unknown command: {}", cmd); 57 serial_println!("unknown command: {}", cmd);
@@ -124,11 +126,13 @@ fn cmd_help() {
124 gop_println!(" mem — show memory info"); 126 gop_println!(" mem — show memory info");
125 gop_println!(" mmap — dump the UEFI memory map"); 127 gop_println!(" mmap — dump the UEFI memory map");
126 gop_println!(" stress — stress-test heap/page allocators"); 128 gop_println!(" stress — stress-test heap/page allocators");
129 gop_println!(" date — show current date/time (RTC)");
130 gop_println!(" pci — list PCI devices");
127 gop_println!(" halt — halt the system (hlt loop)"); 131 gop_println!(" halt — halt the system (hlt loop)");
128 gop_println!(" poweroff — shut down via ACPI (ResetSystem)"); 132 gop_println!(" poweroff — shut down via ACPI (ResetSystem)");
129 gop_println!(" exit — alias for poweroff"); 133 gop_println!(" exit — alias for poweroff");
130 serial_println!("available commands:"); 134 serial_println!("available commands:");
131 serial_println!(" help, echo, clear, hello, info, mem, mmap, stress, halt, poweroff, exit"); 135 serial_println!(" help, echo, clear, hello, info, mem, mmap, stress, date, pci, halt, poweroff, exit");
132} 136}
133 137
134fn cmd_echo(args: &str) { 138fn cmd_echo(args: &str) {
@@ -364,6 +368,38 @@ fn cmd_halt() -> ! {
364 rsnix::power::halt() 368 rsnix::power::halt()
365} 369}
366 370
371fn cmd_date() {
372 let t = rsnix::rtc::now();
373 let line = alloc::format!(
374 "{}-{:02}-{:02} {:02}:{:02}:{:02}",
375 t.year, t.month, t.day, t.hour, t.minute, t.second
376 );
377 gop_println!("{}", line);
378 serial_println!("{}", line);
379}
380
381fn cmd_pci() {
382 let devices = rsnix::pci::probe();
383 let mut out = alloc::string::String::new();
384 use alloc::fmt::Write;
385 let _ = writeln!(out, "pci: {} device(s)", devices.len());
386 let _ = writeln!(out, " bus dev fn class vendor:device");
387 for d in &devices {
388 let _ = writeln!(
389 out,
390 " {:02x}:{:02x}.{} {:<16} {:04x}:{:04x}",
391 d.bus,
392 d.device,
393 d.func,
394 rsnix::pci::class_name(d.class, d.subclass),
395 d.vendor,
396 d.device_id
397 );
398 }
399 gop_print!("{}", out);
400 serial_print!("{}", out);
401}
402
367fn cmd_poweroff() -> ! { 403fn cmd_poweroff() -> ! {
368 gop_println!("shutting down..."); 404 gop_println!("shutting down...");
369 serial_println!("shutting down..."); 405 serial_println!("shutting down...");