Fix broken build due to bad merge of debug_uart.rs
Change-Id: I6373f61910fb5d05677a4c99c47877c5504f7035
diff --git a/board/src/main.rs b/board/src/main.rs
index c1dcffb..9025306 100644
--- a/board/src/main.rs
+++ b/board/src/main.rs
@@ -13,8 +13,6 @@
use capsules::virtual_hmac::VirtualMuxHmac;
use kernel::capabilities;
use kernel::common::dynamic_deferred_call::{DynamicDeferredCall, DynamicDeferredCallClientState};
-use kernel::common::registers::{ReadOnly, WriteOnly};
-use kernel::common::StaticRef;
use kernel::component::Component;
use kernel::hil;
use kernel::hil::i2c::I2CMaster;
@@ -90,6 +88,23 @@
}
}
+
+pub struct MatchaHAL {
+}
+
+impl matcha_capsules::debug_uart::DebugUartHAL for MatchaHAL {
+ fn send_sync(&self, buf: &[u8], len: usize) {
+ unsafe {
+ let tx_busy = 0x4000_0010 as *const u32;
+ let tx_port = 0x4000_0018 as *mut u32;
+ for i in 0..len{
+ while (tx_busy.read_volatile() & 1) != 0 {}
+ tx_port.write_volatile(buf[i] as u32);
+ }
+ }
+ }
+}
+
/// Reset Handler.
///
/// This function is called from the arch crate after some very basic RISC-V
@@ -267,11 +282,15 @@
matcha::i2c::I2C.set_master_client(i2c_master);
+ let matcha_hal = static_init!(
+ MatchaHAL,
+ MatchaHAL{}
+ );
+
let debug_uart = static_init!(
DebugUart,
DebugUart {
- tx_busy: StaticRef::new(0x4000_0010 as *const ReadOnly<u32>),
- tx_port: StaticRef::new(0x4000_0018 as *const WriteOnly<u32>),
+ hal: matcha_hal,
app_data_grant: board_kernel.create_grant(&memory_allocation_cap)
}
);
diff --git a/capsules/src/debug_uart.rs b/capsules/src/debug_uart.rs
index a2b9035..1d6fe4c 100644
--- a/capsules/src/debug_uart.rs
+++ b/capsules/src/debug_uart.rs
@@ -25,26 +25,26 @@
//! let result = syscalls::command(driver_num, 0, buffer.len(), 0);
//! drop(allow);
-//use crate::driver;
-use kernel::common::registers::{ReadOnly, WriteOnly};
-use kernel::common::StaticRef;
use kernel::{AppId, AppSlice, Callback, Driver, Grant, ReturnCode, Shared};
-//pub const DRIVER_NUM: usize = driver::NUM::DebugUart as usize;
pub const DRIVER_NUM: usize = 0x00009 as usize;
+pub trait DebugUartHAL {
+ fn send_sync(&self, buf: &[u8], len: usize);
+}
+
#[derive(Default)]
pub struct AppData {
pub buffer: Option<AppSlice<Shared, u8>>,
}
pub struct DebugUart {
- pub tx_busy: StaticRef<ReadOnly<u32>>,
- pub tx_port: StaticRef<WriteOnly<u32>>,
+ pub hal: &'static dyn DebugUartHAL,
pub app_data_grant: Grant<AppData>,
}
impl Driver for DebugUart {
+
fn subscribe(&self, _: usize, _: Option<Callback>, _: AppId) -> ReturnCode {
ReturnCode::EINVAL
}
@@ -56,10 +56,7 @@
let _ = self.app_data_grant.enter(app_id, |app_data, _| {
if let Some(buf) = &app_data.buffer {
- for i in 0..r2 {
- while (self.tx_busy.get() & 1) != 0 {}
- self.tx_port.set(buf.as_ref()[i] as u32);
- }
+ self.hal.send_sync(buf.as_ref(), r2);
}
});
return ReturnCode::SUCCESS;