rust-raspberrypi-OS-tutorials/13_integrated_testing/src/bsp/raspberrypi/console.rs

48 lines
1.8 KiB
Rust
Raw Normal View History

2020-03-28 12:23:22 +00:00
// SPDX-License-Identifier: MIT OR Apache-2.0
//
// Copyright (c) 2018-2020 Andre Richter <andre.o.richter@gmail.com>
//! BSP console facilities.
2020-03-31 21:45:17 +00:00
use super::memory;
use crate::{bsp::device_driver, console};
2020-03-28 12:23:22 +00:00
use core::fmt;
//--------------------------------------------------------------------------------------------------
// Public Code
//--------------------------------------------------------------------------------------------------
/// In case of a panic, the panic handler uses this function to take a last shot at printing
/// something before the system is halted.
///
/// We try to init panic-versions of the GPIO and the UART. The panic versions are not protected
/// with synchronization primitives, which increases chances that we get to print something, even
/// when the kernel's default GPIO or UART instances happen to be locked at the time of the panic.
///
2020-03-28 12:23:22 +00:00
/// # Safety
///
/// - Use only for printing during a panic.
pub unsafe fn panic_console_out() -> impl fmt::Write {
let mut panic_gpio = device_driver::PanicGPIO::new(memory::map::mmio::GPIO_START);
let mut panic_uart = device_driver::PanicUart::new(memory::map::mmio::PL011_UART_START);
panic_gpio.map_pl011_uart();
panic_uart.init();
panic_uart
2020-03-28 12:23:22 +00:00
}
/// Return a reference to the console.
pub fn console() -> &'static impl console::interface::All {
&super::PL011_UART
}
//--------------------------------------------------------------------------------------------------
// Testing
//--------------------------------------------------------------------------------------------------
/// Minimal code needed to bring up the console in QEMU (for testing only). This is often less steps
/// than on real hardware due to QEMU's abstractions.
///
/// For the RPi, nothing needs to be done.
pub fn qemu_bring_up_console() {}