use crate::svd::{
create_bit_range, create_cluster, create_field, create_register, create_register_properties,
};
use crate::Result;
pub fn create(harts: usize) -> Result<svd::RegisterCluster> {
Ok(svd::RegisterCluster::Cluster(create_cluster(
"threshold_claim",
"PLIC threshold and claim_complete registers",
0x200000,
&[
svd::RegisterCluster::Register(create_register(
"threshold",
"Interrupt priority threshold of each context. The PLIC will mask all PLIC interrupts of a priority less than or equal to `threshold`.",
0x0,
create_register_properties(32, 0)?,
Some(&[create_field("threshold", "", create_bit_range("[31:0]")?, svd::Access::ReadWrite, None)?]),
None,
)?),
svd::RegisterCluster::Register(create_register(
"claim_complete",
"Interrupt source `claim` (read) and complete (write) register. The PLIC will write pending interrupt source information to the `claim` register. When the interrupt handler is finished, the interrupt source idendification should be written to the corresponding `complete` register.",
0x4,
create_register_properties(32, 0)?,
Some(&[
create_field(
"claim",
"",
create_bit_range("[31:0]")?,
svd::Access::ReadOnly,
None,
)?,
create_field(
"complete",
"",
create_bit_range("[31:0]")?,
svd::Access::WriteOnly,
None,
)?,
]),
None,
)?),
],
Some(svd::DimElement::builder()
.dim(harts as u32)
.dim_increment(0x1000)
.build(svd::ValidateLevel::Strict)?),
)?))
}