mirror of https://github.com/m-labs/artiq.git
runtime: interrogate ethmac error counters and display changes.
This commit is contained in:
parent
978c0d98aa
commit
cdf63c5ea0
|
@ -1,8 +1,9 @@
|
|||
use core::slice;
|
||||
use board::{csr, mem};
|
||||
use core::{slice, fmt};
|
||||
use smoltcp::Error;
|
||||
use smoltcp::phy::{DeviceCapabilities, Device};
|
||||
|
||||
use board::{csr, mem};
|
||||
|
||||
const RX_SLOTS: usize = csr::ETHMAC_RX_SLOTS as usize;
|
||||
const TX_SLOTS: usize = csr::ETHMAC_TX_SLOTS as usize;
|
||||
const SLOT_SIZE: usize = csr::ETHMAC_SLOT_SIZE as usize;
|
||||
|
@ -84,3 +85,47 @@ impl Drop for TxBuffer {
|
|||
unsafe { csr::ethmac::sram_reader_start_write(1) }
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Default)]
|
||||
pub struct EthernetStatistics {
|
||||
rx_errors: u32,
|
||||
rx_dropped: u32,
|
||||
}
|
||||
|
||||
impl EthernetStatistics {
|
||||
pub fn new() -> Self {
|
||||
unsafe {
|
||||
EthernetStatistics {
|
||||
rx_errors: csr::ethmac::crc_errors_read(),
|
||||
rx_dropped: csr::ethmac::sram_writer_errors_read(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update(&mut self) -> Option<Self> {
|
||||
let old = self.clone();
|
||||
*self = Self::new();
|
||||
|
||||
let diff = EthernetStatistics {
|
||||
rx_errors: self.rx_errors.wrapping_sub(old.rx_errors),
|
||||
rx_dropped: self.rx_dropped.wrapping_sub(old.rx_dropped),
|
||||
};
|
||||
if diff == EthernetStatistics::default() {
|
||||
None
|
||||
} else {
|
||||
Some(diff)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for EthernetStatistics {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
if self.rx_errors > 0 {
|
||||
write!(f, " rx crc errors: {}", self.rx_errors)?
|
||||
}
|
||||
if self.rx_dropped > 0 {
|
||||
write!(f, " rx dropped: {}", self.rx_dropped)?
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -153,6 +153,7 @@ fn startup() {
|
|||
}
|
||||
}
|
||||
|
||||
let mut net_stats = ethmac::EthernetStatistics::new();
|
||||
loop {
|
||||
scheduler.run();
|
||||
|
||||
|
@ -162,6 +163,10 @@ fn startup() {
|
|||
Err(smoltcp::Error::Unrecognized) => (),
|
||||
Err(err) => warn!("network error: {}", err)
|
||||
}
|
||||
|
||||
if let Some(net_stats_diff) = net_stats.update() {
|
||||
warn!("ethernet mac:{}", net_stats_diff); // mac:{} (sic)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue