use rigless::soc::{Access, FieldSpec, Layout, ReadAction, RegisterSpec, Width, WriteModify};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Register {
Cr = 0,
Imr = 1,
Sr = 2,
Ifcr = 3,
Dr00 = 4,
Dr01 = 5,
Dr10 = 6,
Csr = 7,
Dir = 8,
Verr = 9,
Idr = 10,
Sidr = 11,
}
impl Register {
pub const ALL: [Self; 12] = [Self::Cr, Self::Imr, Self::Sr, Self::Ifcr, Self::Dr00, Self::Dr01, Self::Dr10, Self::Csr, Self::Dir, Self::Verr, Self::Idr, Self::Sidr];
}
impl Layout for Register {
const REGISTERS: &'static [RegisterSpec] = ®ISTERS;
fn from_index(index: usize) -> Option<Self> {
Self::ALL.get(index).copied()
}
fn index(self) -> usize {
self as usize
}
}
pub mod cr {
use super::FieldSpec;
pub const SPDIFRXEN: &FieldSpec = &super::REGISTERS[0].fields[0];
pub const RXDMAEN: &FieldSpec = &super::REGISTERS[0].fields[1];
pub const RXSTEO: &FieldSpec = &super::REGISTERS[0].fields[2];
pub const DRFMT: &FieldSpec = &super::REGISTERS[0].fields[3];
pub const PMSK: &FieldSpec = &super::REGISTERS[0].fields[4];
pub const VMSK: &FieldSpec = &super::REGISTERS[0].fields[5];
pub const CUMSK: &FieldSpec = &super::REGISTERS[0].fields[6];
pub const PTMSK: &FieldSpec = &super::REGISTERS[0].fields[7];
pub const CBDMAEN: &FieldSpec = &super::REGISTERS[0].fields[8];
pub const CHSEL: &FieldSpec = &super::REGISTERS[0].fields[9];
pub const NBTR: &FieldSpec = &super::REGISTERS[0].fields[10];
pub const WFA: &FieldSpec = &super::REGISTERS[0].fields[11];
pub const INSEL: &FieldSpec = &super::REGISTERS[0].fields[12];
pub const CKSEN: &FieldSpec = &super::REGISTERS[0].fields[13];
pub const CKSBKPEN: &FieldSpec = &super::REGISTERS[0].fields[14];
}
pub mod imr {
use super::FieldSpec;
pub const RXNEIE: &FieldSpec = &super::REGISTERS[1].fields[0];
pub const CSRNEIE: &FieldSpec = &super::REGISTERS[1].fields[1];
pub const PERRIE: &FieldSpec = &super::REGISTERS[1].fields[2];
pub const OVRIE: &FieldSpec = &super::REGISTERS[1].fields[3];
pub const SBLKIE: &FieldSpec = &super::REGISTERS[1].fields[4];
pub const SYNCDIE: &FieldSpec = &super::REGISTERS[1].fields[5];
pub const IFEIE: &FieldSpec = &super::REGISTERS[1].fields[6];
}
pub mod sr {
use super::FieldSpec;
pub const RXNE: &FieldSpec = &super::REGISTERS[2].fields[0];
pub const CSRNE: &FieldSpec = &super::REGISTERS[2].fields[1];
pub const PERR: &FieldSpec = &super::REGISTERS[2].fields[2];
pub const OVR: &FieldSpec = &super::REGISTERS[2].fields[3];
pub const SBD: &FieldSpec = &super::REGISTERS[2].fields[4];
pub const SYNCD: &FieldSpec = &super::REGISTERS[2].fields[5];
pub const FERR: &FieldSpec = &super::REGISTERS[2].fields[6];
pub const SERR: &FieldSpec = &super::REGISTERS[2].fields[7];
pub const TERR: &FieldSpec = &super::REGISTERS[2].fields[8];
pub const WIDTH5: &FieldSpec = &super::REGISTERS[2].fields[9];
}
pub mod ifcr {
use super::FieldSpec;
pub const PERRCF: &FieldSpec = &super::REGISTERS[3].fields[0];
pub const OVRCF: &FieldSpec = &super::REGISTERS[3].fields[1];
pub const SBDCF: &FieldSpec = &super::REGISTERS[3].fields[2];
pub const SYNCDCF: &FieldSpec = &super::REGISTERS[3].fields[3];
}
pub mod dr_00 {
use super::FieldSpec;
pub const DR: &FieldSpec = &super::REGISTERS[4].fields[0];
pub const PE: &FieldSpec = &super::REGISTERS[4].fields[1];
pub const V: &FieldSpec = &super::REGISTERS[4].fields[2];
pub const U: &FieldSpec = &super::REGISTERS[4].fields[3];
pub const C: &FieldSpec = &super::REGISTERS[4].fields[4];
pub const PT: &FieldSpec = &super::REGISTERS[4].fields[5];
}
pub mod dr_01 {
use super::FieldSpec;
pub const PE: &FieldSpec = &super::REGISTERS[5].fields[0];
pub const V: &FieldSpec = &super::REGISTERS[5].fields[1];
pub const U: &FieldSpec = &super::REGISTERS[5].fields[2];
pub const C: &FieldSpec = &super::REGISTERS[5].fields[3];
pub const PT: &FieldSpec = &super::REGISTERS[5].fields[4];
pub const DR: &FieldSpec = &super::REGISTERS[5].fields[5];
}
pub mod dr_10 {
use super::FieldSpec;
pub const DRNL1: &FieldSpec = &super::REGISTERS[6].fields[0];
pub const DRNL2: &FieldSpec = &super::REGISTERS[6].fields[1];
}
pub mod csr {
use super::FieldSpec;
pub const USR: &FieldSpec = &super::REGISTERS[7].fields[0];
pub const CS: &FieldSpec = &super::REGISTERS[7].fields[1];
pub const SOB: &FieldSpec = &super::REGISTERS[7].fields[2];
}
pub mod dir {
use super::FieldSpec;
pub const THI: &FieldSpec = &super::REGISTERS[8].fields[0];
pub const TLO: &FieldSpec = &super::REGISTERS[8].fields[1];
}
pub mod verr {
use super::FieldSpec;
pub const MINREV: &FieldSpec = &super::REGISTERS[9].fields[0];
pub const MAJREV: &FieldSpec = &super::REGISTERS[9].fields[1];
}
pub mod idr {
use super::FieldSpec;
pub const ID: &FieldSpec = &super::REGISTERS[10].fields[0];
}
pub mod sidr {
use super::FieldSpec;
pub const SID: &FieldSpec = &super::REGISTERS[11].fields[0];
}
pub static REGISTERS: [RegisterSpec; 12] = [
RegisterSpec { name: "CR", offset: 0x0, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "SPDIFRXEN", bit: 0, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RXDMAEN", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "RXSTEO", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DRFMT", bit: 4, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PMSK", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "VMSK", bit: 7, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CUMSK", bit: 8, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PTMSK", bit: 9, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CBDMAEN", bit: 10, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CHSEL", bit: 11, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "NBTR", bit: 12, width: 2, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "WFA", bit: 14, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "INSEL", bit: 16, width: 3, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CKSEN", bit: 20, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CKSBKPEN", bit: 21, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "IMR", offset: 0x4, width: Width::W32, reset: 0x0000_0000, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "RXNEIE", bit: 0, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CSRNEIE", bit: 1, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PERRIE", bit: 2, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVRIE", bit: 3, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SBLKIE", bit: 4, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SYNCDIE", bit: 5, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "IFEIE", bit: 6, width: 1, access: Access::ReadWrite, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "SR", offset: 0x8, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "RXNE", bit: 0, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CSRNE", bit: 1, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PERR", bit: 2, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVR", bit: 3, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SBD", bit: 4, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SYNCD", bit: 5, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "FERR", bit: 6, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SERR", bit: 7, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TERR", bit: 8, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "WIDTH5", bit: 16, width: 15, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "IFCR", offset: 0xC, width: Width::W32, reset: 0x0000_0000, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "PERRCF", bit: 2, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "OVRCF", bit: 3, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SBDCF", bit: 4, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SYNCDCF", bit: 5, width: 1, access: Access::WriteOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DR_00", offset: 0x10, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "DR", bit: 0, width: 24, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PE", bit: 24, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "V", bit: 25, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "U", bit: 26, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "C", bit: 27, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PT", bit: 28, width: 2, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DR_01", offset: 0x10, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "PE", bit: 0, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "V", bit: 1, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "U", bit: 2, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "C", bit: 3, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "PT", bit: 4, width: 2, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DR", bit: 8, width: 24, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DR_10", offset: 0x10, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "DRNL1", bit: 0, width: 16, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "DRNL2", bit: 16, width: 16, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "CSR", offset: 0x14, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "USR", bit: 0, width: 16, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "CS", bit: 16, width: 8, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "SOB", bit: 24, width: 1, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "DIR", offset: 0x18, width: Width::W32, reset: 0x0000_0000, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "THI", bit: 0, width: 13, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "TLO", bit: 16, width: 13, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "VERR", offset: 0x3F4, width: Width::W32, reset: 0x0000_0012, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "MINREV", bit: 0, width: 4, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
FieldSpec { name: "MAJREV", bit: 4, width: 4, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "IDR", offset: 0x3F8, width: Width::W32, reset: 0x0013_0041, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "ID", bit: 0, width: 32, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
RegisterSpec { name: "SIDR", offset: 0x3FC, width: Width::W32, reset: 0xA3C5_DD01, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None, fields: &[
FieldSpec { name: "SID", bit: 0, width: 32, access: Access::ReadOnly, read: ReadAction::None, write: WriteModify::None },
] },
];