svd-generator 0.2.0

Converts device information from flattened device tree into an SVD description
Documentation
use crate::svd::{
    create_bit_range, create_cluster, create_field, create_register, create_register_properties,
};
use crate::Result;

/// Creates the RISC-V PLIC Enable register.
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)?),
    )?))
}