Skip to content

Commit

Permalink
PR hermit-os#112 requires minor changes to the system interface
Browse files Browse the repository at this point in the history
- a `handle` must be use to free the buffer
  • Loading branch information
stlankes committed Jan 2, 2021
1 parent 8f890a1 commit ab80374
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions hermit-sys/src/net/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ extern "Rust" {
fn sys_get_mtu() -> Result<u16, ()>;
fn sys_get_tx_buffer(len: usize) -> Result<(*mut u8, usize), ()>;
fn sys_send_tx_buffer(handle: usize, len: usize) -> Result<(), ()>;
fn sys_receive_rx_buffer() -> Result<&'static mut [u8], ()>;
fn sys_rx_buffer_consumed() -> Result<(), ()>;
fn sys_receive_rx_buffer() -> Result<(&'static mut [u8], usize), ()>;
fn sys_rx_buffer_consumed(handle: usize) -> Result<(), ()>;
fn sys_free_tx_buffer(handle: usize);
}

Expand Down Expand Up @@ -123,7 +123,7 @@ impl<'a> Device<'a> for HermitNet {

fn receive(&'a mut self) -> Option<(Self::RxToken, Self::TxToken)> {
match unsafe { sys_receive_rx_buffer() } {
Ok(buffer) => Some((RxToken::new(buffer), TxToken::new())),
Ok((buffer, handle)) => Some((RxToken::new(buffer, handle), TxToken::new())),
_ => None,
}
}
Expand All @@ -137,11 +137,12 @@ impl<'a> Device<'a> for HermitNet {
#[doc(hidden)]
pub struct RxToken {
buffer: &'static mut [u8],
handle: usize,
}

impl RxToken {
pub fn new(buffer: &'static mut [u8]) -> Self {
Self { buffer }
pub fn new(buffer: &'static mut [u8], handle: usize) -> Self {
Self { buffer, handle }
}
}

Expand All @@ -152,7 +153,7 @@ impl phy::RxToken for RxToken {
F: FnOnce(&mut [u8]) -> smoltcp::Result<R>,
{
let result = f(self.buffer);
if unsafe { sys_rx_buffer_consumed().is_ok() } {
if unsafe { sys_rx_buffer_consumed(self.handle).is_ok() } {
result
} else {
Err(smoltcp::Error::Exhausted)
Expand Down

0 comments on commit ab80374

Please sign in to comment.