use super::*;
const CSR_REGISTER_BASE: u64 = 0xfffff0000000;
const FIRMWARE_ID_OFFSET: u64 = 0x50000;
const HARDWARE_ID_OFFSET: u64 = 0x90020;
pub trait OxfordOperation {
const HARDWARE_ID_IS_FW970: u32 = 0x39443841; const HARDWARE_ID_IS_FW971: u32 = 0x39373100;
fn read_firmware_id(
req: &FwReq,
node: &FwNode,
firmware_id: &mut u32,
timeout_ms: u32,
) -> Result<(), Error> {
let mut quadlet = [0; 4];
req.transaction_sync(
node,
FwTcode::ReadQuadletRequest,
CSR_REGISTER_BASE + FIRMWARE_ID_OFFSET,
4,
&mut quadlet,
timeout_ms,
)
.map(|_| *firmware_id = u32::from_be_bytes(quadlet))
}
fn read_hardware_id(
req: &FwReq,
node: &FwNode,
hardware_id: &mut u32,
timeout_ms: u32,
) -> Result<(), Error> {
let mut quadlet = [0; 4];
req.transaction_sync(
node,
FwTcode::ReadQuadletRequest,
CSR_REGISTER_BASE + HARDWARE_ID_OFFSET,
4,
&mut quadlet,
timeout_ms,
)
.map(|_| *hardware_id = u32::from_be_bytes(quadlet))
}
}