Skip to content

Commit

Permalink
fix(gem-net): unsafe_op_in_unsafe_fn
Browse files Browse the repository at this point in the history
Signed-off-by: Martin Kröning <[email protected]>
  • Loading branch information
mkroening committed May 1, 2024
1 parent b8baadf commit d8d33bc
Showing 1 changed file with 32 additions and 26 deletions.
58 changes: 32 additions & 26 deletions src/drivers/net/gem.rs
Original file line number Diff line number Diff line change
Expand Up @@ -705,36 +705,42 @@ pub fn init_device(
}

unsafe fn phy_read(gem: *mut Registers, addr: u32, reg: PhyReg) -> u16 {
// Check that no MDIO operation is in progress
wait_for_mdio(gem);
// Initiate the data shift operation over MDIO
(*gem).phy_maintenance.write(
PHYMaintenance::CLAUSE_22::SET
+ PHYMaintenance::OP::READ
+ PHYMaintenance::ADDR.val(addr)
+ PHYMaintenance::REG.val(reg as u32)
+ PHYMaintenance::MUST_10::MUST_BE_10,
);
wait_for_mdio(gem);
(*gem).phy_maintenance.read(PHYMaintenance::DATA) as u16
unsafe {
// Check that no MDIO operation is in progress
wait_for_mdio(gem);
// Initiate the data shift operation over MDIO
(*gem).phy_maintenance.write(
PHYMaintenance::CLAUSE_22::SET
+ PHYMaintenance::OP::READ
+ PHYMaintenance::ADDR.val(addr)
+ PHYMaintenance::REG.val(reg as u32)
+ PHYMaintenance::MUST_10::MUST_BE_10,
);
wait_for_mdio(gem);
(*gem).phy_maintenance.read(PHYMaintenance::DATA) as u16
}
}

unsafe fn phy_write(gem: *mut Registers, addr: u32, reg: PhyReg, data: u16) {
// Check that no MDIO operation is in progress
wait_for_mdio(gem);
// Initiate the data shift operation over MDIO
(*gem).phy_maintenance.write(
PHYMaintenance::CLAUSE_22::SET
+ PHYMaintenance::OP::WRITE
+ PHYMaintenance::ADDR.val(addr)
+ PHYMaintenance::REG.val(reg as u32)
+ PHYMaintenance::MUST_10::MUST_BE_10
+ PHYMaintenance::DATA.val(data as u32),
);
wait_for_mdio(gem);
unsafe {
// Check that no MDIO operation is in progress
wait_for_mdio(gem);
// Initiate the data shift operation over MDIO
(*gem).phy_maintenance.write(
PHYMaintenance::CLAUSE_22::SET
+ PHYMaintenance::OP::WRITE
+ PHYMaintenance::ADDR.val(addr)
+ PHYMaintenance::REG.val(reg as u32)
+ PHYMaintenance::MUST_10::MUST_BE_10
+ PHYMaintenance::DATA.val(data as u32),
);
wait_for_mdio(gem);
}
}

unsafe fn wait_for_mdio(gem: *mut Registers) {
// Check that no MDIO operation is in progress
while !(*gem).network_status.is_set(NetworkStatus::PHY_MGMT_IDLE) {}
unsafe {
// Check that no MDIO operation is in progress
while !(*gem).network_status.is_set(NetworkStatus::PHY_MGMT_IDLE) {}
}
}

0 comments on commit d8d33bc

Please sign in to comment.