svd-generator 0.4.3

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

/// Creates StarFive JH7110 Crypto SHA registers.
pub fn create() -> Result<svd::RegisterCluster> {
    Ok(svd::RegisterCluster::Cluster(create_cluster(
        "sha",
        "JH7110 Crypto SHA registers",
        0x300,
        &[
            svd::RegisterCluster::Register(create_register(
                "csr",
                "JH7110 Crypto SHA CSR",
                0x0,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "start",
                        "SHA CSR Start",
                        create_bit_range("[0:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "reset",
                        "SHA Reset",
                        create_bit_range("[1:1]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "ie",
                        "SHA Interrupt Enable",
                        create_bit_range("[2:2]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "firstb",
                        "SHA First B",
                        create_bit_range("[3:3]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "mode",
                        "SHA Mode - 0: SM3, 1: SHA0, 2: SHA1, 3: SHA224, 4: SHA256, 5: SHA384, 6: SHA512, 7: MASK",
                        create_bit_range("[6:4]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "sha_final",
                        "SHA Final",
                        create_bit_range("[8:8]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "hmac",
                        "SHA HMAC",
                        create_bit_range("[11:11]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "key_done",
                        "SHA Key Done",
                        create_bit_range("[13:13]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "key_flag",
                        "SHA Key Flag",
                        create_bit_range("[14:14]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "hmac_done",
                        "SHA HMAC Done",
                        create_bit_range("[15:15]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "busy",
                        "SHA Busy",
                        create_bit_range("[16:16]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "shadone",
                        "SHA Done",
                        create_bit_range("[17:17]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                None,
            )?),
            svd::RegisterCluster::Register(create_register(
                "wdr",
                "JH7110 Crypto SHA WDR",
                0x4,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "wdr",
                        "SHA WDR",
                        create_bit_range("[31:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                None,
            )?),
            svd::RegisterCluster::Register(create_register(
                "rdr",
                "JH7110 Crypto SHA RDR",
                0x8,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "rdr",
                        "SHA RDR",
                        create_bit_range("[31:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                None,
            )?),
            svd::RegisterCluster::Register(create_register(
                "wsr",
                "JH7110 Crypto SHA WSR",
                0xc,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "wsr",
                        "SHA WSR",
                        create_bit_range("[31:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                None,
            )?),
            svd::RegisterCluster::Register(create_register(
                "wlen",
                "JH7110 Crypto SHA WLEN",
                0x10,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "wlen",
                        "SHA WLEN",
                        create_bit_range("[31:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                Some(svd::DimElement::builder()
                    .dim(4)
                    .dim_increment(0x4)
                    .dim_index(Some([
                        String::from("3"),
                        String::from("2"),
                        String::from("1"),
                        String::from("0"),
                    ].into()))
                    .build(svd::ValidateLevel::Strict)?),
            )?),
            svd::RegisterCluster::Register(create_register(
                "wkr",
                "JH7110 Crypto SHA WKR",
                0x20,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "wkr",
                        "SHA WKR",
                        create_bit_range("[31:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                None,
            )?),
            svd::RegisterCluster::Register(create_register(
                "klen",
                "JH7110 Crypto SHA KLEN",
                0x24,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "klen",
                        "SHA KLEN",
                        create_bit_range("[31:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                None,
            )?),
        ],
        None,
    )?))
}