include "mem_config.fbs"; include "clock.fbs"; namespace hmmmm.config; // Configuration for a single base device (leaf node in the device tree). // Equivalent to a standalone device TOML (e.g. AVRrc.toml, gpio.toml). table BaseDeviceConfig { libpath: string; mem_segments: [MemSegment]; } // A composite device that contains other devices. table ComposeDeviceConfig { devices: [DeviceEntry]; // child devices (base or compose) projections: [Projection]; // memory projections between children intercepts: [Intercept]; // memory intercepts between children } // A device can be either a leaf (base) or a container (compose). union DeviceConfig { BaseDeviceConfig, ComposeDeviceConfig, } // Override for one memory segment within a child device. // Only fields that need changing from the base config must be set. table MemSegOverride { segment: string; addr: uint32; len: uint32; word_len: uint8; executable: bool; } // One device entry in a device tree. table DeviceEntry { // Local identifier, unique within this composite (e.g. "core", "gpio_a"). id: string; // Inline device configuration — either base or compose. config: DeviceConfig; clock: DeviceClockConfig; overrides: [MemSegOverride]; } // Root type when serialising a standalone device config to a binary file. root_type BaseDeviceConfig;