diff --git a/src/satman/src/main.rs b/src/satman/src/main.rs index 2a588b9..bb41fda 100644 --- a/src/satman/src/main.rs +++ b/src/satman/src/main.rs @@ -81,12 +81,6 @@ fn drtiosat_tsc_loaded() -> bool { } } -fn drtiosat_async_ready() { - unsafe { - csr::drtiosat::async_messages_ready_write(1); - } -} - #[cfg(has_drtio_routing)] macro_rules! forward { ($routing_table:expr, $destination:expr, $rank:expr, $repeaters:expr, $packet:expr, $timer:expr) => {{ @@ -245,14 +239,6 @@ fn process_aux_packet( #[cfg(not(has_drtio_routing))] drtioaux::Packet::RoutingSetRank { rank: _ } => drtioaux::send(0, &drtioaux::Packet::RoutingAck), - drtioaux::Packet::RoutingRetrievePackets => { - let packet = router - .get_upstream_packet() - .or(Some(drtioaux::Packet::RoutingNoPackets)) - .unwrap(); - drtioaux::send(0, &packet) - } - drtioaux::Packet::MonitorRequest { destination: _destination, channel, @@ -1067,8 +1053,8 @@ pub extern "C" fn main_core0() -> i32 { } } - if router.any_upstream_waiting() { - drtiosat_async_ready(); + if let Some(packet) = router.get_upstream_packet() { + drtioaux::send(0, &packet).unwrap(); } } diff --git a/src/satman/src/repeater.rs b/src/satman/src/repeater.rs index e7f6b78..8c00e58 100644 --- a/src/satman/src/repeater.rs +++ b/src/satman/src/repeater.rs @@ -119,16 +119,11 @@ impl Repeater { } } RepeaterState::Up => { - self.process_unsolicited_aux(); + self.process_unsolicited_aux(routing_table, rank, destination, router); if !rep_link_rx_up(self.repno) { info!("[REP#{}] link is down", self.repno); self.state = RepeaterState::Down; } - if self.async_messages_ready() { - if let Err(e) = self.handle_async(routing_table, rank, destination, router, timer) { - warn!("[REP#{}] Error handling async messages ({:?})", self.repno, e); - } - } } RepeaterState::Failed => { if !rep_link_rx_up(self.repno) { @@ -139,9 +134,15 @@ impl Repeater { } } - fn process_unsolicited_aux(&self) { + fn process_unsolicited_aux( + &self, + routing_table: &drtio_routing::RoutingTable, + rank: u8, + destination: u8, + router: &mut Router, + ) { match drtioaux::recv(self.auxno) { - Ok(Some(packet)) => warn!("[REP#{}] unsolicited aux packet: {:?}", self.repno, packet), + Ok(Some(packet)) => router.route(packet, routing_table, rank, destination), Ok(None) => (), Err(_) => warn!("[REP#{}] aux packet error", self.repno), } @@ -186,34 +187,6 @@ impl Repeater { } } - fn async_messages_ready(&self) -> bool { - let async_rdy; - unsafe { - async_rdy = (csr::DRTIOREP[self.repno as usize].async_messages_ready_read)(); - (csr::DRTIOREP[self.repno as usize].async_messages_ready_write)(0); - } - async_rdy == 1 - } - - fn handle_async( - &self, - routing_table: &drtio_routing::RoutingTable, - rank: u8, - self_destination: u8, - router: &mut Router, - timer: &mut GlobalTimer, - ) -> Result<(), drtioaux::Error> { - loop { - drtioaux::send(self.auxno, &drtioaux::Packet::RoutingRetrievePackets).unwrap(); - let reply = self.recv_aux_timeout(200, timer)?; - match reply { - drtioaux::Packet::RoutingNoPackets => break, - packet => router.route(packet, routing_table, rank, self_destination), - } - } - Ok(()) - } - fn recv_aux_timeout(&self, timeout: u32, timer: &mut GlobalTimer) -> Result { let max_time = timer.get_time() + Milliseconds(timeout.into()); loop { diff --git a/src/satman/src/routing.rs b/src/satman/src/routing.rs index 46f8e7f..3276444 100644 --- a/src/satman/src/routing.rs +++ b/src/satman/src/routing.rs @@ -75,7 +75,6 @@ pub struct Router { local_queue: VecDeque, #[cfg(has_drtio_routing)] downstream_queue: VecDeque<(usize, drtioaux::Packet)>, - upstream_notified: bool, } impl Router { @@ -85,7 +84,6 @@ impl Router { local_queue: VecDeque::new(), #[cfg(has_drtio_routing)] downstream_queue: VecDeque::new(), - upstream_notified: false, } } @@ -161,22 +159,8 @@ impl Router { } } - pub fn any_upstream_waiting(&mut self) -> bool { - let empty = self.upstream_queue.is_empty(); - if !empty && !self.upstream_notified { - self.upstream_notified = true; // so upstream will not get spammed with notifications - true - } else { - false - } - } - pub fn get_upstream_packet(&mut self) -> Option { - let packet = self.upstream_queue.pop_front(); - if packet.is_none() { - self.upstream_notified = false; - } - packet + self.upstream_queue.pop_front() } #[cfg(has_drtio_routing)]