#![allow(dead_code)]
pub mod rdes0 {
pub const CRC_ERR: u32 = 1 << 1;
pub const DRIBBLE_ERR: u32 = 1 << 2;
pub const RX_ERR: u32 = 1 << 3;
pub const RX_WATCHDOG: u32 = 1 << 4;
pub const FRAME_TYPE: u32 = 1 << 5;
pub const LATE_COLLISION: u32 = 1 << 6;
pub const LAST_DESC: u32 = 1 << 8;
pub const FIRST_DESC: u32 = 1 << 9;
pub const OVERFLOW_ERR: u32 = 1 << 11;
pub const LENGTH_ERR: u32 = 1 << 12;
pub const DESC_ERR: u32 = 1 << 14;
pub const ERR_SUMMARY: u32 = 1 << 15;
pub const FRAME_LEN_SHIFT: u32 = 16;
pub const FRAME_LEN_MASK: u32 = 0x3FFF << 16;
pub const DA_FILTER_FAIL: u32 = 1 << 30;
pub const OWN: u32 = 1 << 31;
pub const ALL_ERRORS: u32 = CRC_ERR
| DRIBBLE_ERR
| RX_ERR
| RX_WATCHDOG
| LATE_COLLISION
| OVERFLOW_ERR
| LENGTH_ERR
| DESC_ERR;
}
pub mod rdes1 {
pub const BUFFER1_SIZE_MASK: u32 = 0x1FFF;
pub const BUFFER1_SIZE_SHIFT: u32 = 0;
pub const SECOND_ADDR_CHAINED: u32 = 1 << 14;
pub const RX_END_OF_RING: u32 = 1 << 15;
pub const DISABLE_IRQ: u32 = 1 << 31;
}
pub mod tdes0 {
pub const UNDERFLOW_ERR: u32 = 1 << 1;
pub const EXCESSIVE_DEFERRAL: u32 = 1 << 2;
pub const COLLISION_COUNT_SHIFT: u32 = 3;
pub const COLLISION_COUNT_MASK: u32 = 0xF << 3;
pub const EXCESSIVE_COLLISION: u32 = 1 << 8;
pub const LATE_COLLISION: u32 = 1 << 9;
pub const NO_CARRIER: u32 = 1 << 10;
pub const LOSS_OF_CARRIER: u32 = 1 << 11;
pub const IP_PAYLOAD_ERR: u32 = 1 << 12;
pub const JABBER_TIMEOUT: u32 = 1 << 14;
pub const ERR_SUMMARY: u32 = 1 << 15;
pub const IP_HEADER_ERR: u32 = 1 << 16;
pub const SECOND_ADDR_CHAINED: u32 = 1 << 20;
pub const TX_END_OF_RING: u32 = 1 << 21;
pub const CHECKSUM_INSERT_SHIFT: u32 = 22;
pub const CHECKSUM_INSERT_MASK: u32 = 0x3 << 22;
pub const FIRST_SEGMENT: u32 = 1 << 28;
pub const LAST_SEGMENT: u32 = 1 << 29;
pub const INTERRUPT_ON_COMPLETE: u32 = 1 << 30;
pub const OWN: u32 = 1 << 31;
pub const ALL_ERRORS: u32 = UNDERFLOW_ERR
| EXCESSIVE_DEFERRAL
| EXCESSIVE_COLLISION
| LATE_COLLISION
| NO_CARRIER
| LOSS_OF_CARRIER
| IP_PAYLOAD_ERR
| JABBER_TIMEOUT
| IP_HEADER_ERR;
}
pub mod tdes1 {
pub const BUFFER1_SIZE_MASK: u32 = 0x1FFF;
pub const BUFFER1_SIZE_SHIFT: u32 = 0;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn rdes0_own_is_bit_31() {
assert_eq!(rdes0::OWN, 1 << 31);
}
#[test]
fn tdes0_own_is_bit_31() {
assert_eq!(tdes0::OWN, 1 << 31);
}
#[test]
fn rdes0_frame_len_mask_covers_bits_16_to_29() {
assert_eq!(rdes0::FRAME_LEN_MASK, 0x3FFF_0000);
}
#[test]
fn tdes0_first_segment_is_bit_28() {
assert_eq!(tdes0::FIRST_SEGMENT, 1 << 28);
}
#[test]
fn tdes0_last_segment_is_bit_29() {
assert_eq!(tdes0::LAST_SEGMENT, 1 << 29);
}
#[test]
fn tdes1_buffer1_size_mask_is_13_bits() {
assert_eq!(tdes1::BUFFER1_SIZE_MASK, 0x1FFF);
}
#[test]
fn rdes1_buffer1_size_mask_is_13_bits() {
assert_eq!(rdes1::BUFFER1_SIZE_MASK, 0x1FFF);
}
#[test]
fn rdes1_second_addr_chained_is_bit_14() {
assert_eq!(rdes1::SECOND_ADDR_CHAINED, 1 << 14);
}
#[test]
fn tdes0_second_addr_chained_is_bit_20() {
assert_eq!(tdes0::SECOND_ADDR_CHAINED, 1 << 20);
}
#[test]
fn tdes0_all_errors_covers_expected_bits() {
assert!(tdes0::ALL_ERRORS & tdes0::UNDERFLOW_ERR != 0);
assert!(tdes0::ALL_ERRORS & tdes0::EXCESSIVE_DEFERRAL != 0);
assert!(tdes0::ALL_ERRORS & tdes0::EXCESSIVE_COLLISION != 0);
assert!(tdes0::ALL_ERRORS & tdes0::LATE_COLLISION != 0);
assert!(tdes0::ALL_ERRORS & tdes0::NO_CARRIER != 0);
assert!(tdes0::ALL_ERRORS & tdes0::LOSS_OF_CARRIER != 0);
assert!(tdes0::ALL_ERRORS & tdes0::IP_PAYLOAD_ERR != 0);
assert!(tdes0::ALL_ERRORS & tdes0::JABBER_TIMEOUT != 0);
assert!(tdes0::ALL_ERRORS & tdes0::IP_HEADER_ERR != 0);
}
#[test]
fn rdes0_all_errors_covers_expected_bits() {
assert!(rdes0::ALL_ERRORS & rdes0::CRC_ERR != 0);
assert!(rdes0::ALL_ERRORS & rdes0::DRIBBLE_ERR != 0);
assert!(rdes0::ALL_ERRORS & rdes0::RX_ERR != 0);
assert!(rdes0::ALL_ERRORS & rdes0::RX_WATCHDOG != 0);
assert!(rdes0::ALL_ERRORS & rdes0::LATE_COLLISION != 0);
assert!(rdes0::ALL_ERRORS & rdes0::OVERFLOW_ERR != 0);
assert!(rdes0::ALL_ERRORS & rdes0::LENGTH_ERR != 0);
assert!(rdes0::ALL_ERRORS & rdes0::DESC_ERR != 0);
}
}