use core::marker::PhantomData;
use tock_registers::fields::{Field, FieldValue, TryFromValue};
use tock_registers::interfaces::{Readable, Writeable};
pub use tock_registers::register_bitfields;
use tock_registers::registers::{
ReadOnly as TRReadOnly, ReadWrite as TRReadWrite, WriteOnly as TRWriteOnly,
};
use tock_registers::{LocalRegisterCopy, RegisterLongName, UIntLike as TRUIntLike};
pub trait UIntLike: TRUIntLike {
fn one() -> Self;
fn max() -> Self {
!Self::zero()
}
fn trailing_zeros(self) -> u32;
fn into_usize(self) -> usize;
}
impl UIntLike for u8 {
fn one() -> Self {
1
}
fn trailing_zeros(self) -> u32 {
self.trailing_zeros()
}
fn into_usize(self) -> usize {
self as usize
}
}
impl UIntLike for u16 {
fn one() -> Self {
1
}
fn trailing_zeros(self) -> u32 {
self.trailing_zeros()
}
fn into_usize(self) -> usize {
self as usize
}
}
impl UIntLike for u32 {
fn one() -> Self {
1
}
fn trailing_zeros(self) -> u32 {
self.trailing_zeros()
}
fn into_usize(self) -> usize {
self as usize
}
}
impl UIntLike for u64 {
fn one() -> Self {
1
}
fn trailing_zeros(self) -> u32 {
self.trailing_zeros()
}
fn into_usize(self) -> usize {
self as usize
}
}
impl UIntLike for u128 {
fn one() -> Self {
1
}
fn trailing_zeros(self) -> u32 {
self.trailing_zeros()
}
fn into_usize(self) -> usize {
self as usize
}
}
pub trait BaseReadableRegister<T: UIntLike> {
type Reg: RegisterLongName;
const REG_WIDTH: usize;
fn base_get(&self) -> T;
}
pub trait BaseWriteableRegister<T: UIntLike> {
type Reg: RegisterLongName;
const REG_WIDTH: usize;
fn base_set(&self, value: T);
}
pub trait Read<T: UIntLike> {
type Reg: RegisterLongName;
const REG_WIDTH: usize;
fn get(&self) -> T;
fn read(&self, field: Field<T, Self::Reg>) -> T;
fn read_as_enum<E: TryFromValue<T, EnumType = E>>(
&self,
field: Field<T, Self::Reg>,
) -> Option<E>;
fn extract(&self) -> LocalRegisterCopy<T, Self::Reg>;
fn is_set(&self, field: Field<T, Self::Reg>) -> bool;
fn any_matching_bits_set(&self, field: FieldValue<T, Self::Reg>) -> bool;
fn matches_all(&self, field: FieldValue<T, Self::Reg>) -> bool;
}
pub trait Write<T: UIntLike> {
type Reg: RegisterLongName;
const REG_WIDTH: usize;
fn set(&self, value: T);
fn write(&self, field: FieldValue<T, Self::Reg>);
}
pub trait ReadWrite<T: UIntLike>: Read<T> + Write<T> {
const REG_WIDTH: usize;
fn modify(&self, field: FieldValue<T, <Self as Read<T>>::Reg>);
fn modify_no_read(
&self,
original: LocalRegisterCopy<T, <Self as Read<T>>::Reg>,
field: FieldValue<T, <Self as Read<T>>::Reg>,
);
}
impl<R, T: UIntLike> Read<T> for R
where
R: BaseReadableRegister<T>,
{
type Reg = <Self as BaseReadableRegister<T>>::Reg;
const REG_WIDTH: usize = R::REG_WIDTH;
#[inline]
fn get(&self) -> T {
self.base_get()
}
#[inline]
fn read(&self, field: Field<T, Self::Reg>) -> T {
field.read(self.get())
}
#[inline]
fn read_as_enum<E: TryFromValue<T, EnumType = E>>(
&self,
field: Field<T, Self::Reg>,
) -> Option<E> {
field.read_as_enum(self.get())
}
#[inline]
fn extract(&self) -> LocalRegisterCopy<T, Self::Reg> {
LocalRegisterCopy::new(self.get())
}
#[inline]
fn is_set(&self, field: Field<T, Self::Reg>) -> bool {
field.is_set(self.get())
}
#[inline]
fn any_matching_bits_set(&self, field: FieldValue<T, Self::Reg>) -> bool {
field.any_matching_bits_set(self.get())
}
#[inline]
fn matches_all(&self, field: FieldValue<T, Self::Reg>) -> bool {
field.matches_all(self.get())
}
}
impl<R, T: UIntLike> Write<T> for R
where
R: BaseWriteableRegister<T>,
{
type Reg = <Self as BaseWriteableRegister<T>>::Reg;
const REG_WIDTH: usize = R::REG_WIDTH;
#[inline]
fn set(&self, value: T) {
self.base_set(value)
}
#[inline]
fn write(&self, field: FieldValue<T, Self::Reg>) {
self.set(field.value)
}
}
impl<R, T: UIntLike> ReadWrite<T> for R
where
R: Read<T> + Write<T>,
{
const REG_WIDTH: usize = <R as Read<T>>::REG_WIDTH;
#[inline]
fn modify(&self, field: FieldValue<T, <Self as Read<T>>::Reg>) {
self.set(field.modify(self.get()));
}
#[inline]
fn modify_no_read(
&self,
original: LocalRegisterCopy<T, <Self as Read<T>>::Reg>,
field: FieldValue<T, <Self as Read<T>>::Reg>,
) {
self.set(field.modify(original.get()));
}
}
pub trait LiteXSoCRegisterConfiguration {
type ReadOnly8: BaseReadableRegister<u8, Reg = ()>;
type WriteOnly8: BaseWriteableRegister<u8, Reg = ()>;
type ReadWrite8: BaseReadableRegister<u8, Reg = ()> + BaseWriteableRegister<u8, Reg = ()>;
type ReadOnly16: BaseReadableRegister<u16, Reg = ()>;
type WriteOnly16: BaseWriteableRegister<u16, Reg = ()>;
type ReadWrite16: BaseReadableRegister<u16, Reg = ()> + BaseWriteableRegister<u16, Reg = ()>;
type ReadOnly32: BaseReadableRegister<u32, Reg = ()>;
type WriteOnly32: BaseWriteableRegister<u32, Reg = ()>;
type ReadWrite32: BaseReadableRegister<u32, Reg = ()> + BaseWriteableRegister<u32, Reg = ()>;
type ReadOnly64: BaseReadableRegister<u64, Reg = ()>;
type WriteOnly64: BaseWriteableRegister<u64, Reg = ()>;
type ReadWrite64: BaseReadableRegister<u64, Reg = ()> + BaseWriteableRegister<u64, Reg = ()>;
}
pub enum LiteXSoCRegistersC8B32 {}
impl LiteXSoCRegisterConfiguration for LiteXSoCRegistersC8B32 {
type ReadOnly8 = ReadOnly8C8B32;
type WriteOnly8 = WriteOnly8C8B32;
type ReadWrite8 = ReadWrite8C8B32;
type ReadOnly16 = ReadOnly16C8B32;
type WriteOnly16 = WriteOnly16C8B32;
type ReadWrite16 = ReadWrite16C8B32;
type ReadOnly32 = ReadOnly32C8B32;
type WriteOnly32 = WriteOnly32C8B32;
type ReadWrite32 = ReadWrite32C8B32;
type ReadOnly64 = ReadOnly64C8B32;
type WriteOnly64 = WriteOnly64C8B32;
type ReadWrite64 = ReadWrite64C8B32;
}
pub enum LiteXSoCRegistersC32B32 {}
impl LiteXSoCRegisterConfiguration for LiteXSoCRegistersC32B32 {
type ReadOnly8 = ReadOnly8C32B32;
type WriteOnly8 = WriteOnly8C32B32;
type ReadWrite8 = ReadWrite8C32B32;
type ReadOnly16 = ReadOnly16C32B32;
type WriteOnly16 = WriteOnly16C32B32;
type ReadWrite16 = ReadWrite16C32B32;
type ReadOnly32 = ReadOnly32C32B32;
type WriteOnly32 = WriteOnly32C32B32;
type ReadWrite32 = ReadWrite32C32B32;
type ReadOnly64 = ReadOnly64C32B32;
type WriteOnly64 = WriteOnly64C32B32;
type ReadWrite64 = ReadWrite64C32B32;
}
pub struct ReadRegWrapper<'a, T: UIntLike, N: RegisterLongName, R: BaseReadableRegister<T>>(
&'a R,
PhantomData<T>,
PhantomData<N>,
);
impl<'a, T: UIntLike, N: RegisterLongName, R: BaseReadableRegister<T>> ReadRegWrapper<'a, T, N, R> {
#[inline]
pub fn wrap(reg: &'a R) -> Self {
ReadRegWrapper(reg, PhantomData, PhantomData)
}
}
impl<T: UIntLike, N: RegisterLongName, R: BaseReadableRegister<T>> BaseReadableRegister<T>
for ReadRegWrapper<'_, T, N, R>
{
type Reg = N;
const REG_WIDTH: usize = R::REG_WIDTH;
#[inline]
fn base_get(&self) -> T {
self.0.base_get()
}
}
pub struct WriteRegWrapper<'a, T: UIntLike, N: RegisterLongName, R: BaseWriteableRegister<T>>(
&'a R,
PhantomData<T>,
PhantomData<N>,
);
impl<'a, T: UIntLike, N: RegisterLongName, R: BaseWriteableRegister<T>>
WriteRegWrapper<'a, T, N, R>
{
#[inline]
pub fn wrap(reg: &'a R) -> Self {
WriteRegWrapper(reg, PhantomData, PhantomData)
}
}
impl<T: UIntLike, N: RegisterLongName, R: BaseWriteableRegister<T>> BaseWriteableRegister<T>
for WriteRegWrapper<'_, T, N, R>
{
type Reg = N;
const REG_WIDTH: usize = R::REG_WIDTH;
#[inline]
fn base_set(&self, value: T) {
self.0.base_set(value)
}
}
pub struct ReadWriteRegWrapper<
'a,
T: UIntLike,
N: RegisterLongName,
R: BaseReadableRegister<T> + BaseWriteableRegister<T>,
>(&'a R, PhantomData<T>, PhantomData<N>);
impl<
'a,
T: UIntLike,
N: RegisterLongName,
R: BaseReadableRegister<T> + BaseWriteableRegister<T>,
> ReadWriteRegWrapper<'a, T, N, R>
{
#[inline]
pub fn wrap(reg: &'a R) -> Self {
ReadWriteRegWrapper(reg, PhantomData, PhantomData)
}
}
impl<T: UIntLike, N: RegisterLongName, R: BaseReadableRegister<T> + BaseWriteableRegister<T>>
BaseReadableRegister<T> for ReadWriteRegWrapper<'_, T, N, R>
{
type Reg = N;
const REG_WIDTH: usize = <R as BaseReadableRegister<T>>::REG_WIDTH;
#[inline]
fn base_get(&self) -> T {
self.0.base_get()
}
}
impl<T: UIntLike, N: RegisterLongName, R: BaseReadableRegister<T> + BaseWriteableRegister<T>>
BaseWriteableRegister<T> for ReadWriteRegWrapper<'_, T, N, R>
{
type Reg = N;
const REG_WIDTH: usize = <R as BaseWriteableRegister<T>>::REG_WIDTH;
#[inline]
fn base_set(&self, value: T) {
self.0.base_set(value)
}
}
#[repr(C)]
pub struct ReadOnly8C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u8>,
_reserved_0: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u8> for ReadOnly8C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
#[inline]
fn base_get(&self) -> u8 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
u8::from_be_bytes([reg_p0_val[0usize]])
}
}
#[repr(C)]
pub struct WriteOnly8C8B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u8>,
_reserved_0: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u8> for WriteOnly8C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
#[inline]
fn base_set(&self, value: u8) {
let bytes: [u8; 1usize] = u8::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
}
}
#[repr(C)]
pub struct ReadWrite8C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u8>,
_reserved_0: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u8> for ReadWrite8C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
#[inline]
fn base_get(&self) -> u8 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
u8::from_be_bytes([reg_p0_val[0usize]])
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u8> for ReadWrite8C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
#[inline]
fn base_set(&self, value: u8) {
let bytes: [u8; 1usize] = u8::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
}
}
#[repr(C)]
pub struct ReadOnly16C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRReadOnly<u8>,
_reserved_1: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u16> for ReadOnly16C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
#[inline]
fn base_get(&self) -> u16 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p1.get());
u16::from_be_bytes([reg_p0_val[0usize], reg_p1_val[0usize]])
}
}
#[repr(C)]
pub struct WriteOnly16C8B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRWriteOnly<u8>,
_reserved_1: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u16> for WriteOnly16C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
#[inline]
fn base_set(&self, value: u16) {
let bytes: [u8; 2usize] = u16::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
self.reg_p1.set(u8::from_be_bytes([bytes[1usize]]));
}
}
#[repr(C)]
pub struct ReadWrite16C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRReadWrite<u8>,
_reserved_1: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u16> for ReadWrite16C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
#[inline]
fn base_get(&self) -> u16 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p1.get());
u16::from_be_bytes([reg_p0_val[0usize], reg_p1_val[0usize]])
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u16> for ReadWrite16C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
#[inline]
fn base_set(&self, value: u16) {
let bytes: [u8; 2usize] = u16::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
self.reg_p1.set(u8::from_be_bytes([bytes[1usize]]));
}
}
#[repr(C)]
pub struct ReadOnly32C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRReadOnly<u8>,
_reserved_1: [u8; 3usize],
reg_p2: TRReadOnly<u8>,
_reserved_2: [u8; 3usize],
reg_p3: TRReadOnly<u8>,
_reserved_3: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u32> for ReadOnly32C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_get(&self) -> u32 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p1.get());
let reg_p2_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p2.get());
let reg_p3_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p3.get());
u32::from_be_bytes([
reg_p0_val[0usize],
reg_p1_val[0usize],
reg_p2_val[0usize],
reg_p3_val[0usize],
])
}
}
#[repr(C)]
pub struct WriteOnly32C8B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRWriteOnly<u8>,
_reserved_1: [u8; 3usize],
reg_p2: TRWriteOnly<u8>,
_reserved_2: [u8; 3usize],
reg_p3: TRWriteOnly<u8>,
_reserved_3: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u32> for WriteOnly32C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_set(&self, value: u32) {
let bytes: [u8; 4usize] = u32::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
self.reg_p1.set(u8::from_be_bytes([bytes[1usize]]));
self.reg_p2.set(u8::from_be_bytes([bytes[2usize]]));
self.reg_p3.set(u8::from_be_bytes([bytes[3usize]]));
}
}
#[repr(C)]
pub struct ReadWrite32C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRReadWrite<u8>,
_reserved_1: [u8; 3usize],
reg_p2: TRReadWrite<u8>,
_reserved_2: [u8; 3usize],
reg_p3: TRReadWrite<u8>,
_reserved_3: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u32> for ReadWrite32C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_get(&self) -> u32 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p1.get());
let reg_p2_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p2.get());
let reg_p3_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p3.get());
u32::from_be_bytes([
reg_p0_val[0usize],
reg_p1_val[0usize],
reg_p2_val[0usize],
reg_p3_val[0usize],
])
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u32> for ReadWrite32C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_set(&self, value: u32) {
let bytes: [u8; 4usize] = u32::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
self.reg_p1.set(u8::from_be_bytes([bytes[1usize]]));
self.reg_p2.set(u8::from_be_bytes([bytes[2usize]]));
self.reg_p3.set(u8::from_be_bytes([bytes[3usize]]));
}
}
#[repr(C)]
pub struct ReadOnly64C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRReadOnly<u8>,
_reserved_1: [u8; 3usize],
reg_p2: TRReadOnly<u8>,
_reserved_2: [u8; 3usize],
reg_p3: TRReadOnly<u8>,
_reserved_3: [u8; 3usize],
reg_p4: TRReadOnly<u8>,
_reserved_4: [u8; 3usize],
reg_p5: TRReadOnly<u8>,
_reserved_5: [u8; 3usize],
reg_p6: TRReadOnly<u8>,
_reserved_6: [u8; 3usize],
reg_p7: TRReadOnly<u8>,
_reserved_7: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u64> for ReadOnly64C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_get(&self) -> u64 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p1.get());
let reg_p2_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p2.get());
let reg_p3_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p3.get());
let reg_p4_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p4.get());
let reg_p5_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p5.get());
let reg_p6_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p6.get());
let reg_p7_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p7.get());
u64::from_be_bytes([
reg_p0_val[0usize],
reg_p1_val[0usize],
reg_p2_val[0usize],
reg_p3_val[0usize],
reg_p4_val[0usize],
reg_p5_val[0usize],
reg_p6_val[0usize],
reg_p7_val[0usize],
])
}
}
#[repr(C)]
pub struct WriteOnly64C8B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRWriteOnly<u8>,
_reserved_1: [u8; 3usize],
reg_p2: TRWriteOnly<u8>,
_reserved_2: [u8; 3usize],
reg_p3: TRWriteOnly<u8>,
_reserved_3: [u8; 3usize],
reg_p4: TRWriteOnly<u8>,
_reserved_4: [u8; 3usize],
reg_p5: TRWriteOnly<u8>,
_reserved_5: [u8; 3usize],
reg_p6: TRWriteOnly<u8>,
_reserved_6: [u8; 3usize],
reg_p7: TRWriteOnly<u8>,
_reserved_7: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u64> for WriteOnly64C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_set(&self, value: u64) {
let bytes: [u8; 8usize] = u64::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
self.reg_p1.set(u8::from_be_bytes([bytes[1usize]]));
self.reg_p2.set(u8::from_be_bytes([bytes[2usize]]));
self.reg_p3.set(u8::from_be_bytes([bytes[3usize]]));
self.reg_p4.set(u8::from_be_bytes([bytes[4usize]]));
self.reg_p5.set(u8::from_be_bytes([bytes[5usize]]));
self.reg_p6.set(u8::from_be_bytes([bytes[6usize]]));
self.reg_p7.set(u8::from_be_bytes([bytes[7usize]]));
}
}
#[repr(C)]
pub struct ReadWrite64C8B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u8>,
_reserved_0: [u8; 3usize],
reg_p1: TRReadWrite<u8>,
_reserved_1: [u8; 3usize],
reg_p2: TRReadWrite<u8>,
_reserved_2: [u8; 3usize],
reg_p3: TRReadWrite<u8>,
_reserved_3: [u8; 3usize],
reg_p4: TRReadWrite<u8>,
_reserved_4: [u8; 3usize],
reg_p5: TRReadWrite<u8>,
_reserved_5: [u8; 3usize],
reg_p6: TRReadWrite<u8>,
_reserved_6: [u8; 3usize],
reg_p7: TRReadWrite<u8>,
_reserved_7: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u64> for ReadWrite64C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_get(&self) -> u64 {
let reg_p0_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p1.get());
let reg_p2_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p2.get());
let reg_p3_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p3.get());
let reg_p4_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p4.get());
let reg_p5_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p5.get());
let reg_p6_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p6.get());
let reg_p7_val: [u8; 1usize] = u8::to_be_bytes(self.reg_p7.get());
u64::from_be_bytes([
reg_p0_val[0usize],
reg_p1_val[0usize],
reg_p2_val[0usize],
reg_p3_val[0usize],
reg_p4_val[0usize],
reg_p5_val[0usize],
reg_p6_val[0usize],
reg_p7_val[0usize],
])
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u64> for ReadWrite64C8B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_set(&self, value: u64) {
let bytes: [u8; 8usize] = u64::to_be_bytes(value);
self.reg_p0.set(u8::from_be_bytes([bytes[0usize]]));
self.reg_p1.set(u8::from_be_bytes([bytes[1usize]]));
self.reg_p2.set(u8::from_be_bytes([bytes[2usize]]));
self.reg_p3.set(u8::from_be_bytes([bytes[3usize]]));
self.reg_p4.set(u8::from_be_bytes([bytes[4usize]]));
self.reg_p5.set(u8::from_be_bytes([bytes[5usize]]));
self.reg_p6.set(u8::from_be_bytes([bytes[6usize]]));
self.reg_p7.set(u8::from_be_bytes([bytes[7usize]]));
}
}
#[repr(C)]
pub struct ReadOnly8C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u8>,
_reserved_0: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u8> for ReadOnly8C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
fn base_get(&self) -> u8 {
self.reg_p0.get()
}
}
#[repr(C)]
pub struct WriteOnly8C32B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u8>,
_reserved_0: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u8> for WriteOnly8C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
#[inline]
fn base_set(&self, value: u8) {
self.reg_p0.set(value)
}
}
#[repr(C)]
pub struct ReadWrite8C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u8>,
_reserved_0: [u8; 3usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u8> for ReadWrite8C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
fn base_get(&self) -> u8 {
self.reg_p0.get()
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u8> for ReadWrite8C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 8usize;
#[inline]
fn base_set(&self, value: u8) {
self.reg_p0.set(value)
}
}
#[repr(C)]
pub struct ReadOnly16C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u16>,
_reserved_0: [u8; 2usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u16> for ReadOnly16C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
fn base_get(&self) -> u16 {
self.reg_p0.get()
}
}
#[repr(C)]
pub struct WriteOnly16C32B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u16>,
_reserved_0: [u8; 2usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u16> for WriteOnly16C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
#[inline]
fn base_set(&self, value: u16) {
self.reg_p0.set(value)
}
}
#[repr(C)]
pub struct ReadWrite16C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u16>,
_reserved_0: [u8; 2usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u16> for ReadWrite16C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
fn base_get(&self) -> u16 {
self.reg_p0.get()
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u16> for ReadWrite16C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 16usize;
#[inline]
fn base_set(&self, value: u16) {
self.reg_p0.set(value)
}
}
#[repr(C)]
pub struct ReadOnly32C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u32>,
_reserved_0: [u8; 0usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u32> for ReadOnly32C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_get(&self) -> u32 {
let reg_p0_val: [u8; 4usize] = u32::to_be_bytes(self.reg_p0.get());
u32::from_be_bytes([
reg_p0_val[0usize],
reg_p0_val[1usize],
reg_p0_val[2usize],
reg_p0_val[3usize],
])
}
}
#[repr(C)]
pub struct WriteOnly32C32B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u32>,
_reserved_0: [u8; 0usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u32> for WriteOnly32C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_set(&self, value: u32) {
let bytes: [u8; 4usize] = u32::to_be_bytes(value);
self.reg_p0.set(u32::from_be_bytes([
bytes[0usize],
bytes[1usize],
bytes[2usize],
bytes[3usize],
]));
}
}
#[repr(C)]
pub struct ReadWrite32C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u32>,
_reserved_0: [u8; 0usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u32> for ReadWrite32C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_get(&self) -> u32 {
let reg_p0_val: [u8; 4usize] = u32::to_be_bytes(self.reg_p0.get());
u32::from_be_bytes([
reg_p0_val[0usize],
reg_p0_val[1usize],
reg_p0_val[2usize],
reg_p0_val[3usize],
])
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u32> for ReadWrite32C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 32usize;
#[inline]
fn base_set(&self, value: u32) {
let bytes: [u8; 4usize] = u32::to_be_bytes(value);
self.reg_p0.set(u32::from_be_bytes([
bytes[0usize],
bytes[1usize],
bytes[2usize],
bytes[3usize],
]));
}
}
#[repr(C)]
pub struct ReadOnly64C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadOnly<u32>,
_reserved_0: [u8; 0usize],
reg_p1: TRReadOnly<u32>,
_reserved_1: [u8; 0usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u64> for ReadOnly64C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_get(&self) -> u64 {
let reg_p0_val: [u8; 4usize] = u32::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 4usize] = u32::to_be_bytes(self.reg_p1.get());
u64::from_be_bytes([
reg_p0_val[0usize],
reg_p0_val[1usize],
reg_p0_val[2usize],
reg_p0_val[3usize],
reg_p1_val[0usize],
reg_p1_val[1usize],
reg_p1_val[2usize],
reg_p1_val[3usize],
])
}
}
#[repr(C)]
pub struct WriteOnly64C32B32<N: RegisterLongName = ()> {
reg_p0: TRWriteOnly<u32>,
_reserved_0: [u8; 0usize],
reg_p1: TRWriteOnly<u32>,
_reserved_1: [u8; 0usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseWriteableRegister<u64> for WriteOnly64C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_set(&self, value: u64) {
let bytes: [u8; 8usize] = u64::to_be_bytes(value);
self.reg_p0.set(u32::from_be_bytes([
bytes[0usize],
bytes[1usize],
bytes[2usize],
bytes[3usize],
]));
self.reg_p1.set(u32::from_be_bytes([
bytes[4usize],
bytes[5usize],
bytes[6usize],
bytes[7usize],
]));
}
}
#[repr(C)]
pub struct ReadWrite64C32B32<N: RegisterLongName = ()> {
reg_p0: TRReadWrite<u32>,
_reserved_0: [u8; 0usize],
reg_p1: TRReadWrite<u32>,
_reserved_1: [u8; 0usize],
_regname: PhantomData<N>,
}
impl<N: RegisterLongName> BaseReadableRegister<u64> for ReadWrite64C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_get(&self) -> u64 {
let reg_p0_val: [u8; 4usize] = u32::to_be_bytes(self.reg_p0.get());
let reg_p1_val: [u8; 4usize] = u32::to_be_bytes(self.reg_p1.get());
u64::from_be_bytes([
reg_p0_val[0usize],
reg_p0_val[1usize],
reg_p0_val[2usize],
reg_p0_val[3usize],
reg_p1_val[0usize],
reg_p1_val[1usize],
reg_p1_val[2usize],
reg_p1_val[3usize],
])
}
}
impl<N: RegisterLongName> BaseWriteableRegister<u64> for ReadWrite64C32B32<N> {
type Reg = N;
const REG_WIDTH: usize = 64usize;
#[inline]
fn base_set(&self, value: u64) {
let bytes: [u8; 8usize] = u64::to_be_bytes(value);
self.reg_p0.set(u32::from_be_bytes([
bytes[0usize],
bytes[1usize],
bytes[2usize],
bytes[3usize],
]));
self.reg_p1.set(u32::from_be_bytes([
bytes[4usize],
bytes[5usize],
bytes[6usize],
bytes[7usize],
]));
}
}