use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum RenesasDir {
Out,
In,
Inout,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasChip {
pub name: String,
pub arch: String,
#[serde(default)]
pub core_features: Vec<String>,
pub package: String,
pub cpu_hz: u32,
#[serde(default)]
pub pac_crate: Option<String>,
#[serde(default)]
pub fsp_version: Option<String>,
#[serde(default)]
pub memory: Vec<RenesasMemoryRegion>,
#[serde(default)]
pub gpio_ports: Vec<RenesasGpioPort>,
pub clock_tree: RenesasClockTree,
#[serde(default)]
pub peripherals: IndexMap<String, RenesasPeripheral>,
#[serde(default)]
pub pfs_table: Vec<RenesasPfsEntry>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasMemoryRegion {
pub name: String,
pub base: u32,
pub size: u32,
pub access: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasGpioPort {
pub port: u8,
pub pin_count: u8,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasClockTree {
pub hoco_hz: u32,
pub moco_hz: u32,
pub loco_hz: u32,
pub main_osc_hz: u32,
pub sub_osc_hz: u32,
pub pll_max_hz: u32,
pub cpu_max_hz: u32,
pub pclka_hz: u32,
pub pclkb_hz: u32,
pub pclkc_hz: u32,
pub pclkd_hz: u32,
#[serde(default)]
pub mstp_gates: IndexMap<String, RenesasMstpGate>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasMstpGate {
pub reg: String,
pub bit: u8,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasPeripheral {
pub class: String,
pub instance: String,
pub base: u32,
#[serde(default)]
pub irq: Option<u16>,
#[serde(default)]
pub irq_rxi: Option<u16>,
#[serde(default)]
pub irq_txi: Option<u16>,
#[serde(default)]
pub modes: Option<Vec<String>>,
#[serde(default)]
pub psel_signals: Vec<RenesasPselSignal>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasPselSignal {
pub role: String,
pub direction: RenesasDir,
#[serde(default)]
pub mode: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasPfsEntry {
pub pin: RenesasPortPin,
#[serde(default)]
pub functions: Vec<RenesasPfsFunction>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct RenesasPortPin {
pub port: u8,
pub pin: u8,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasPfsFunction {
pub psel: u8,
pub signal: String,
pub peripheral: String,
pub role: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasBoard {
pub name: String,
pub chip: String,
#[serde(default)]
pub flash_mb: Option<u32>,
#[serde(default)]
pub console: Option<RenesasConsoleConfig>,
#[serde(default)]
pub pins: Vec<RenesasPinAssignment>,
#[serde(default)]
pub sci_modes: IndexMap<String, String>,
#[serde(default)]
pub features: IndexMap<String, String>,
#[serde(default)]
pub i2c_configs: IndexMap<String, RenesasI2cConfig>,
#[serde(default)]
pub spi_configs: IndexMap<String, RenesasSpiConfig>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasConsoleConfig {
pub peripheral: String,
#[serde(default)]
pub sci_mode: Option<String>,
pub baud: u32,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasPinAssignment {
pub port: u8,
pub pin: u8,
pub signal: String,
#[serde(default)]
pub peripheral: Option<String>,
#[serde(default)]
pub role: Option<String>,
pub direction: RenesasDir,
#[serde(default)]
pub psel: Option<u8>,
#[serde(default)]
pub label: Option<String>,
#[serde(default)]
pub pull: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasI2cConfig {
pub frequency: u32,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasSpiConfig {
pub frequency: u32,
#[serde(default)]
pub mode: u8,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasIr {
pub chip: RenesasChip,
pub board: RenesasBoard,
pub clocks: RenesasClocksConfig,
pub pins: Vec<RenesasPinAssignment>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct RenesasClocksConfig {
pub cpu_hz: u32,
pub pclka_hz: u32,
pub pclkb_hz: u32,
pub pclkc_hz: u32,
pub pclkd_hz: u32,
}