use tock_registers::{register_bitfields, register_structs};
use tock_registers::registers::ReadWrite;
register_bitfields![u32,
pub MacControl [
RE OFFSET(2) NUMBITS(1) [],
TE OFFSET(3) NUMBITS(1) [],
DC OFFSET(4) NUMBITS(1) [],
ACS OFFSET(7) NUMBITS(1) [],
DCRS OFFSET(16) NUMBITS(1) [],
PS OFFSET(15) NUMBITS(1) [],
FES OFFSET(14) NUMBITS(1) [],
DM OFFSET(11) NUMBITS(1) [],
],
pub FrameFilter [
PR OFFSET(0) NUMBITS(1) [],
RA OFFSET(31) NUMBITS(1) [],
],
pub MiiAddr [
MII_WRITE OFFSET(1) NUMBITS(1) [],
MII_CLK_CSR OFFSET(2) NUMBITS(4) [],
MII_REG OFFSET(6) NUMBITS(5) [],
MII_PHY OFFSET(11) NUMBITS(5) [],
MII_BUSY OFFSET(0) NUMBITS(1) [],
],
pub Addr0High [
ADDR_HI OFFSET(0) NUMBITS(16) [],
ADDR_ENABLE OFFSET(31) NUMBITS(1) [],
],
pub DmaBusMode [
SWR OFFSET(0) NUMBITS(1) [],
DSL OFFSET(2) NUMBITS(5) [],
PBL OFFSET(8) NUMBITS(6) [],
FB OFFSET(16) NUMBITS(1) [],
AAL OFFSET(25) NUMBITS(1) [],
],
pub DmaStatus [
TI OFFSET(0) NUMBITS(1) [],
RI OFFSET(6) NUMBITS(1) [],
NIS OFFSET(16) NUMBITS(1) [],
],
pub DmaOperation [
SR OFFSET(1) NUMBITS(1) [],
OSF OFFSET(2) NUMBITS(1) [],
ST OFFSET(13) NUMBITS(1) [],
FTF OFFSET(20) NUMBITS(1) [],
TSF OFFSET(21) NUMBITS(1) [],
RSF OFFSET(25) NUMBITS(1) [],
],
];
register_structs! {
pub Dwc3GmacRegs {
(0x0000 => pub mac_control: ReadWrite<u32, MacControl::Register>),
(0x0004 => pub frame_filter: ReadWrite<u32, FrameFilter::Register>),
(0x0008 => pub hash_high: ReadWrite<u32>),
(0x000C => pub hash_low: ReadWrite<u32>),
(0x0010 => pub mii_addr: ReadWrite<u32, MiiAddr::Register>),
(0x0014 => pub mii_data: ReadWrite<u32>),
(0x0018 => _reserved0),
(0x0020 => pub version: ReadWrite<u32>),
(0x0024 => _reserved1),
(0x003C => pub int_mask: ReadWrite<u32>),
(0x0040 => pub addr0_high: ReadWrite<u32, Addr0High::Register>),
(0x0044 => pub addr0_low: ReadWrite<u32>),
(0x0048 => _reserved2),
(0x0100 => pub mmc_cntrl: ReadWrite<u32>),
(0x0104 => _reserved3),
(0x1000 => @END),
}
}
register_structs! {
pub Dwc3DmaRegs {
(0x0000 => pub bus_mode: ReadWrite<u32, DmaBusMode::Register>),
(0x0004 => pub tx_poll: ReadWrite<u32>),
(0x0008 => pub rx_poll: ReadWrite<u32>),
(0x000C => pub rx_base: ReadWrite<u32>),
(0x0010 => pub tx_base: ReadWrite<u32>),
(0x0014 => pub status: ReadWrite<u32, DmaStatus::Register>),
(0x0018 => pub operation: ReadWrite<u32, DmaOperation::Register>),
(0x001C => pub intr_ena: ReadWrite<u32>),
(0x0020 => @END),
}
}
pub const MII_CLK_CSR_60_100M_DIV42: u32 = 0x4;
#[inline]
pub unsafe fn gmac_regs(base: usize) -> &'static Dwc3GmacRegs {
unsafe { &*(base as *const Dwc3GmacRegs) }
}
#[inline]
pub unsafe fn dma_regs(base: usize) -> &'static Dwc3DmaRegs {
unsafe { &*((base + 0x1000) as *const Dwc3DmaRegs) }
}