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 AES registers.
pub fn create() -> Result<svd::RegisterCluster> {
    Ok(svd::RegisterCluster::Cluster(create_cluster(
        "aes",
        "JH7110 Crypto AES registers",
        0x100,
        &[
            svd::RegisterCluster::Register(create_register(
                "aesdio0r",
                "JH7110 Crypto AES AESDIO0R",
                0x0,
                create_register_properties(32, 0)?,
                Some(&[create_field(
                    "aesdio0r",
                    "",
                    create_bit_range("[31:0]")?,
                    svd::Access::ReadWrite,
                    None,
                )?]),
                None,
            )?),
            svd::RegisterCluster::Register(create_register(
                "key",
                "JH7110 Crypto AES Key",
                0x4,
                create_register_properties(32, 0)?,
                Some(&[create_field(
                    "key",
                    "",
                    create_bit_range("[31:0]")?,
                    svd::Access::ReadWrite,
                    None,
                )?]),
                Some(
                    svd::DimElement::builder()
                        .dim(8)
                        .dim_increment(0x4)
                        .build(svd::ValidateLevel::Strict)?,
                ),
            )?),
            svd::RegisterCluster::Register(create_register(
                "csr",
                "JH7110 Crypto AES Control Status Register",
                0x24,
                create_register_properties(32, 0)?,
                Some(&[
                    create_field(
                        "cmode",
                        "",
                        create_bit_range("[0:0]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "keymode",
                        "AES Key Mode - 0: AES 128, 1: AES 192, 2: AES 256",
                        create_bit_range("[2:1]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "busy",
                        "AES Engine Busy",
                        create_bit_range("[3:3]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "done",
                        "AES Engine Done",
                        create_bit_range("[4:4]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "krdy",
                        "AES Key Done",
                        create_bit_range("[5:5]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "rst",
                        "AES Reset",
                        create_bit_range("[6:6]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "ie",
                        "AES Interrupt Enable",
                        create_bit_range("[7:7]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "ccm_start",
                        "AES CCM Start",
                        create_bit_range("[8:8]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "mode",
                        "AES Mode - 0: ECB, 1: CBC, 2: CFB, 3: OFB, 4: CTR, 5: CCM, 6: GCM",
                        create_bit_range("[11:9]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "gcm_start",
                        "AES GCM Start",
                        create_bit_range("[12:12]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "gcm_done",
                        "AES GCM Done",
                        create_bit_range("[13:13]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "delay_aes",
                        "Delay AES",
                        create_bit_range("[14:14]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "vaes_start",
                        "VAES Start",
                        create_bit_range("[15:15]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                    create_field(
                        "stream_mode",
                        "AES Stream Cipher mode - 0: XFB 1, 5: XFB 128",
                        create_bit_range("[26:24]")?,
                        svd::Access::ReadWrite,
                        None,
                    )?,
                ]),
                None,
            )?),
            svd::RegisterCluster::Register(create_register(
                "iv",
                "JH7110 Crypto AES IV",
                0x28,
                create_register_properties(32, 0)?,
                Some(&[create_field(
                    "iv",
                    "",
                    create_bit_range("[31:0]")?,
                    svd::Access::ReadWrite,
                    None,
                )?]),
                Some(
                    svd::DimElement::builder()
                        .dim(4)
                        .dim_increment(0x4)
                        .build(svd::ValidateLevel::Strict)?,
                ),
            )?),
            svd::RegisterCluster::Register(create_register(
                "nonce",
                "JH7110 Crypto AES Nonce",
                0x3c,
                create_register_properties(32, 0)?,
                Some(&[create_field(
                    "nonce",
                    "",
                    create_bit_range("[31:0]")?,
                    svd::Access::ReadWrite,
                    None,
                )?]),
                Some(
                    svd::DimElement::builder()
                        .dim(4)
                        .dim_increment(0x4)
                        .build(svd::ValidateLevel::Strict)?,
                ),
            )?),
            svd::RegisterCluster::Register(create_register(
                "alen",
                "JH7110 Crypto AES ALEN",
                0x4c,
                create_register_properties(32, 0)?,
                Some(&[create_field(
                    "alen",
                    "",
                    create_bit_range("[31:0]")?,
                    svd::Access::ReadWrite,
                    None,
                )?]),
                Some(
                    svd::DimElement::builder()
                        .dim(2)
                        .dim_increment(0x4)
                        .build(svd::ValidateLevel::Strict)?,
                ),
            )?),
            svd::RegisterCluster::Register(create_register(
                "mlen",
                "JH7110 Crypto AES MLEN",
                0x54,
                create_register_properties(32, 0)?,
                Some(&[create_field(
                    "mlen",
                    "",
                    create_bit_range("[31:0]")?,
                    svd::Access::ReadWrite,
                    None,
                )?]),
                Some(
                    svd::DimElement::builder()
                        .dim(2)
                        .dim_increment(0x4)
                        .build(svd::ValidateLevel::Strict)?,
                ),
            )?),
            svd::RegisterCluster::Register(create_register(
                "ivlen",
                "JH7110 Crypto AES IVLEN",
                0x5c,
                create_register_properties(32, 0)?,
                Some(&[create_field(
                    "ivlen",
                    "",
                    create_bit_range("[31:0]")?,
                    svd::Access::ReadWrite,
                    None,
                )?]),
                None,
            )?),
        ],
        None,
    )?))
}