forked from M-Labs/zynq-rs
parent
e408a8b22d
commit
1f05e6977e
@ -1,59 +0,0 @@ |
||||
use bit_field::BitField; |
||||
use super::{PhyRegister, Link, LinkDuplex, LinkSpeed}; |
||||
|
||||
#[derive(Clone, Copy, Debug)] |
||||
/// 1000Base-T Extended Status Register
|
||||
pub struct ExtendedStatus(pub u16); |
||||
|
||||
impl ExtendedStatus { |
||||
pub fn cap_1000base_t_half(&self) -> bool { |
||||
self.0.get_bit(12) |
||||
} |
||||
pub fn cap_1000base_t_full(&self) -> bool { |
||||
self.0.get_bit(13) |
||||
} |
||||
pub fn cap_1000base_x_half(&self) -> bool { |
||||
self.0.get_bit(14) |
||||
} |
||||
pub fn cap_1000base_x_full(&self) -> bool { |
||||
self.0.get_bit(15) |
||||
} |
||||
|
||||
pub fn get_link(&self) -> Option<Link> { |
||||
if self.cap_1000base_t_half() { |
||||
Some(Link { |
||||
speed: LinkSpeed::S1000, |
||||
duplex: LinkDuplex::Half, |
||||
}) |
||||
} else if self.cap_1000base_t_full() { |
||||
Some(Link { |
||||
speed: LinkSpeed::S1000, |
||||
duplex: LinkDuplex::Full, |
||||
}) |
||||
} else if self.cap_1000base_x_half() { |
||||
Some(Link { |
||||
speed: LinkSpeed::S1000, |
||||
duplex: LinkDuplex::Half, |
||||
}) |
||||
} else if self.cap_1000base_x_full() { |
||||
Some(Link { |
||||
speed: LinkSpeed::S1000, |
||||
duplex: LinkDuplex::Full, |
||||
}) |
||||
} else { |
||||
None |
||||
} |
||||
} |
||||
} |
||||
|
||||
impl PhyRegister for ExtendedStatus { |
||||
fn addr() -> u8 { |
||||
0xF |
||||
} |
||||
} |
||||
|
||||
impl From<u16> for ExtendedStatus { |
||||
fn from(value: u16) -> Self { |
||||
ExtendedStatus(value) |
||||
} |
||||
} |
@ -0,0 +1,52 @@ |
||||
use bit_field::BitField; |
||||
use super::{PhyRegister, Link, LinkDuplex, LinkSpeed}; |
||||
|
||||
#[derive(Clone, Copy, Debug)] |
||||
/// PHY-Specific Status Register
|
||||
pub struct PSSR(pub u16); |
||||
|
||||
impl PSSR { |
||||
pub fn link(&self) -> bool { |
||||
self.0.get_bit(10) |
||||
} |
||||
|
||||
pub fn duplex(&self) -> LinkDuplex { |
||||
if self.0.get_bit(13) { |
||||
LinkDuplex::Full |
||||
} else { |
||||
LinkDuplex::Half |
||||
} |
||||
} |
||||
|
||||
pub fn speed(&self) -> Option<LinkSpeed> { |
||||
match self.0.get_bits(14..=15) { |
||||
0b00 => Some(LinkSpeed::S10), |
||||
0b01 => Some(LinkSpeed::S100), |
||||
0b10 => Some(LinkSpeed::S1000), |
||||
_ => None, |
||||
} |
||||
} |
||||
|
||||
pub fn get_link(&self) -> Option<Link> { |
||||
if self.link() { |
||||
Some(Link { |
||||
speed: self.speed()?, |
||||
duplex: self.duplex(), |
||||
}) |
||||
} else { |
||||
None |
||||
} |
||||
} |
||||
} |
||||
|
||||
impl PhyRegister for PSSR { |
||||
fn addr() -> u8 { |
||||
0x11 |
||||
} |
||||
} |
||||
|
||||
impl From<u16> for PSSR { |
||||
fn from(value: u16) -> Self { |
||||
PSSR(value) |
||||
} |
||||
} |
Loading…
Reference in new issue