blob: 874faa459030994ef062e22a17551212f351d313 [file] [log] [blame]
#![no_std]
mod dprintf;
mod mailbox_client;
use mailbox_client::MailboxClient;
use libtock::result::TockResult;
use libtock::syscalls;
use matcha_config::*;
libtock_core::stack_size! {0x1000}
// Global static message buffer. The mailbox driver will copy incoming messages
// here when they arrive.
static mut MESSAGE_BUF: [u8; 4096] = [0; 4096];
//------------------------------------------------------------------------------
#[libtock::main]
async fn main() -> TockResult<()> {
dprintf!("SEC: Booting seL4 from TockOS app!\r\n");
let _result = syscalls::command(CAPSULE_ELFLOADER, CMD_ELFLOADER_BOOT_SEL4, 0, 0);
dprintf!("SEC: Booting seL4 from TockOS app done!\r\n");
MailboxClient::init();
unsafe {
loop {
let (request_size, opt_page) =
MailboxClient::wait_message_async(&mut MESSAGE_BUF).await;
let (request_slice, reply_slice) = MESSAGE_BUF.split_at_mut(request_size);
let reply_size = MailboxClient::dispatch(request_slice, opt_page, reply_slice)
.await
.unwrap_or(0); // XXX send error code
MailboxClient::send_message_sync(reply_size, reply_slice);
}
}
// Unreachable
}