# UniversalisOS API Reference ## Kernel Hypercall Interface Guests communicate with the hypervisor through architecture-specific trap instructions. All hypercalls return a status code in the first return register. ### AArch64 HVC Interface Guests issue `hvc #0x5500` (immediate = `'UOS'`). Call number in `x0`, arguments in `x1`-`x4`, return in `x0`. **Source**: `kernel/src/arch/aarch64/inc/uos_hv_abi.h` | Call # | Name | Args | Description | |--------|------|------|-------------| | 0x00 | `UOS_HV_PUTC` | char | Character output | | 0x01 | `UOS_HV_PUTS` | IPA of NUL string | String output | | 0x02 | `UOS_HV_GETTIME` | — | Get time (ticks) | | 0x03 | `UOS_HV_YIELD` | — | Yield CPU | | 0x04 | `UOS_HV_SHUTDOWN` | — | Shutdown (no return) | | 0x05 | `UOS_HV_ACK_VTIMER` | — | Acknowledge virtual timer | | 0x06 | `UOS_HV_GETC` | — | Character input (poll) | | 0x07 | `UOS_HV_IRQ_ACK` | — | Acknowledge virtual IRQ | | 0x08 | `UOS_HV_IRQ_ENABLE` | irq_num | Enable virtual IRQ | | 0x09 | `UOS_HV_IRQ_DISABLE` | irq_num | Disable virtual IRQ | | 0x0A | `UOS_HV_INFO` | — | Get HV identity/capabilities | | 0x0B | `UOS_HV_GET_VCPU_ID` | — | Get vCPU ID | | 0x0C | `UOS_HV_GET_PART_ID` | — | Get partition ID | | 0x0D | `UOS_HV_GET_TICK_HZ` | — | Get ticks per second | | 0x0E | `UOS_HV_PART_GET_STATUS` | part_id | ARINC-653 partition status | | 0x0F | `UOS_HV_PART_SET_MODE` | part_id, mode | ARINC-653 set mode | | 0x10 | `UOS_HV_ERROR_RAISE` | error_code | ARINC-653 raise error | | 0x11 | `UOS_HV_ERROR_GET_STATUS` | — | ARINC-653 get error status | | 0x12 | `UOS_HV_SAMPLING_CREATE` | port_id, max_msg_size | ARINC-653 sampling port create | | 0x13 | `UOS_HV_SAMPLING_WRITE` | port_id, msg_ptr, msg_size | ARINC-653 sampling port write | | 0x14 | `UOS_HV_SAMPLING_READ` | port_id, msg_ptr, buf_size | ARINC-653 sampling port read | | 0x15 | `UOS_HV_VIRTIO_DISCOVER` | — | VirtIO device discovery | | 0x17 | `UOS_HV_VIRTIO_GET_CONFIG` | dev_id, cfg_ptr | VirtIO get device config | | 0x18 | `UOS_HV_CHECKPOINT` | slot_id | Checkpoint partition | | 0x19 | `UOS_HV_VIRTIO_KICK` / `UOS_HV_RESTORE` | dev_id / slot_id | VirtIO kick or restore | #### Return Codes (AArch64) | Code | Name | Description | |------|------|-------------| | 0 | `UOS_HV_OK` | Success | | -1 | `UOS_HV_EINVAL` | Bad argument | | -2 | `UOS_HV_ENOSYS` | Unknown call number | | -3 | `UOS_HV_EPERM` | Not permitted | | -4 | `UOS_HV_EBUSY` | Resource busy | | -5 | `UOS_HV_EAGAIN` | Would block / nothing pending | | -6 | `UOS_HV_ENOMEM` | No resource | | -7 | `UOS_HV_EFAULT` | Bad guest pointer | | -8 | `UOS_HV_ENXIO` | No such device/irq | | -9 | `UOS_HV_ETIMEDOUT` | Timed out | #### Capability Bits | Bit | Name | Description | |-----|------|-------------| | 0 | `UOS_HV_CAP_CONSOLE` | PUTC/PUTS/GETC | | 1 | `UOS_HV_CAP_VTIMER` | Virtual timer | | 2 | `UOS_HV_CAP_VIRQ` | Virtual IRQ control | | 3 | `UOS_HV_CAP_VIRTIO_BLK` | VirtIO block device | | 4 | `UOS_HV_CAP_STAGE2` | Stage-2 MMU active | | 5 | `UOS_HV_CAP_APEX` | ARINC-653 calls | | 6 | `UOS_HV_CAP_SAMPLING` | ARINC-653 sampling ports | | 7 | `UOS_HV_CAP_VIRTIO_NET` | VirtIO net device | --- ### RISC-V Ecall Interface Guests issue `ecall` from U-mode. Call number in `a7`, arguments in `a0`-`a2`, return in `a0`. **Source**: `kernel/src/arch/riscv/inc/hypercall.h` | Call # | Name | Args | Description | |--------|------|------|-------------| | 0 | `UOS_HCALL_YIELD` | — | Yield CPU | | 1 | `UOS_HCALL_SET_TIMER` | time_lo, time_hi | Set timer | | 2 | `UOS_HCALL_CONSOLE_PUTS` | str_ptr, len | Console output | | 3 | `UOS_HCALL_MAP_MEMORY` | vaddr, paddr, size, flags | Map memory | | 4 | `UOS_HCALL_UNMAP_MEMORY` | vaddr, size | Unmap memory | | 5 | `UOS_HCALL_IPI_SEND` | target_hart | Send IPI | | 6 | `UOS_HCALL_PARTITION_RESET` | — | Reset partition | | 7 | `UOS_HCALL_IRQ_CLAIM` | — | Claim IRQ | | 8 | `UOS_HCALL_IRQ_COMPLETE` | irq_num | Complete IRQ | | 9 | `UOS_HCALL_NEXT_TIMEPART` | — | Next time partition | | 10 | `UOS_HCALL_PART_GET_STATUS` | part_id | ARINC-653 partition status | | 11 | `UOS_HCALL_PART_SET_MODE` | part_id, mode | ARINC-653 set mode | | 12 | `UOS_HCALL_ERROR_RAISE` | error_code | ARINC-653 raise error | | 13 | `UOS_HCALL_ERROR_GET_STATUS` | — | ARINC-653 get error status | | 14 | `UOS_HCALL_GETTIME` | — | Get time (ticks) | | 15 | `UOS_HCALL_SAMPLING_CREATE` | port_id, max_size | Sampling port create | | 16 | `UOS_HCALL_SAMPLING_WRITE` | port_id, msg_ptr, msg_size | Sampling port write | | 17 | `UOS_HCALL_SAMPLING_READ` | port_id, msg_ptr, buf_size | Sampling port read | | 18 | `UOS_HCALL_VIRTIO_DISCOVER` | — | VirtIO device discovery | | 19 | `UOS_HCALL_VIRTIO_KICK` | dev_id | VirtIO kick (notify) | | 20 | `UOS_HCALL_VIRTIO_GET_CONFIG` | dev_id, cfg_ptr | VirtIO get device config | | 21 | `UOS_HCALL_CHECKPOINT` | slot_id | Checkpoint (migration) | | 22 | `UOS_HCALL_RESTORE` | slot_id | Restore (migration) | #### Return Codes (RISC-V) | Code | Name | Description | |------|------|-------------| | 0 | `UOS_HCALL_OK` | Success | | -1 | `UOS_HCALL_EINVAL` | Bad argument | | -7 | `UOS_HCALL_EFAULT` | Bad guest pointer | --- ### ARMv7 Paravirtualized Interface ARMv7 guests run at SVC (no EL2). Opcodes are dispatched through `svc` with the opcode in `r7`. **Source**: `kernel/src/core/abi/uos_pv_abi.h` | Opcode | Name | Description | |--------|------|-------------| | 0xA0 | `PV_SVC_CON_PUTC` | Console character out | | 0xA1 | `PV_SVC_CON_GETC` | Console character in (poll) | | 0xA2 | `PV_SVC_CON_WRITE` | Console buffer write | | 0xA3 | `PV_SVC_IRQ_ACK` | Acknowledge IRQ | | 0xA4 | `PV_SVC_IRQ_ENABLE` | Enable IRQ | | 0xA5 | `PV_SVC_IRQ_DISABLE` | Disable IRQ | | 0xA6 | `PV_SVC_TIME` | Get time (ticks) | | 0xA7 | `PV_SVC_MMIO_READ` | Proxy MMIO read | | 0xA8 | `PV_SVC_MMIO_WRITE` | Proxy MMIO write | | 0xA9 | `PV_SVC_PART_GET_STATUS` | ARINC-653 partition status | | 0xAA | `PV_SVC_PART_SET_MODE` | ARINC-653 set mode | | 0xAB | `PV_SVC_ERROR_RAISE` | ARINC-653 raise error | | 0xAC | `PV_SVC_ERROR_GET_STATUS` | ARINC-653 get error status | | 0xAF | `PV_SVC_HALT` | Halt guest partition | Note: ARMv7 has no dedicated VirtIO hypercalls; VirtIO access goes through MMIO trap-and-emulate (`PV_SVC_MMIO_READ`/`PV_SVC_MMIO_WRITE`). --- ## VirtIO Hypercalls VirtIO hypercalls provide paravirtualized device access. Implemented on AArch64 and RISC-V. ### VIRTIO_DISCOVER Enumerates available VirtIO devices. Returns a bitmap of device IDs and their types. - **AArch64**: `UOS_HV_VIRTIO_DISCOVER` (0x15) - **RISC-V**: `UOS_HCALL_VIRTIO_DISCOVER` (18) ### VIRTIO_KICK Notifies the hypervisor that the guest has updated a virtqueue descriptor. - **AArch64**: `UOS_HV_VIRTIO_KICK` (0x19) - **RISC-V**: `UOS_HCALL_VIRTIO_KICK` (19) ### VIRTIO_GET_CONFIG Reads device-specific configuration space. - **AArch64**: `UOS_HV_VIRTIO_GET_CONFIG` (0x17) - **RISC-V**: `UOS_HCALL_VIRTIO_GET_CONFIG` (20) ### Supported Device Types | Type | Name | |------|------| | 1 | `UOS_VIRTIO_NET` — Network | | 2 | `UOS_VIRTIO_BLOCK` — Block storage | | 3 | `UOS_VIRTIO_CONSOLE` — Console | | 4 | `UOS_VIRTIO_GPU` — GPU | | 5 | `UOS_VIRTIO_INPUT` — Input | | 6 | `UOS_VIRTIO_BALLOON` — Memory balloon | | 7 | `UOS_VIRTIO_CRYPTO` — Crypto | | 8 | `UOS_VIRTIO_CUSTOM` — Custom | --- ## Migration Hypercalls Checkpoint/restore hypercalls for live migration. Available on AArch64 and RISC-V only. ### CHECKPOINT Captures a snapshot of the guest partition state (registers, memory, device state). - **AArch64**: `UOS_HV_CHECKPOINT` (0x18) - **RISC-V**: `UOS_HCALL_CHECKPOINT` (21) - **Args**: `slot_id` (checkpoint slot index, 0 or 1) - **Returns**: `UOS_HV_OK` on success ### RESTORE Restores a previously checkpointed partition state. - **AArch64**: `UOS_HV_RESTORE` (0x19) - **RISC-V**: `UOS_HCALL_RESTORE` (22) - **Args**: `slot_id` - **Returns**: `UOS_HV_OK` on success **Internal format**: Magic `0x554F4348` ("UOSH"), version 1, 2 checkpoint slots. See `kernel/src/core/migration/migrator.h`. --- ## Mycelium CLI The `mycelium` binary replaces PikeOS's proprietary `configconv`. Located in the separate `mycelium` repository (`/home/fabiorafaelcoutada/portugalfuturista/mycelium/`). ### Usage ``` mycelium [OPTIONS] ``` ### Output Modes | Flag | Description | |------|-------------| | `--enum --struct` | Emit C header enums and structs from XSD | | `--enum-asm` | Emit assembler-safe enum header (defines only) | | `--bin` | Emit binary configuration blob from XML instance | | `--crc=NAME` | Emit CRC32 checksum for binary config | | `--test` | Emit `.inc` test harness (C macro assertions) | | `--tfw` | Emit TFW C test harness from test config XML | | `--loader` | Emit struct-aware binary loader (C function) | ### Global Options | Flag | Default | Description | |------|---------|-------------| | `--comment` | `""` | Banner comment in output | | `--ifndef` | `MYCELIUM_GEN_H` | Include guard macro | | `--include` | — | `#include` directive (e.g. ``) | | `--wordsize` | `32` | Pointer word size for `--bin` (32 or 64) | | `--endian` | `little` | Endianness for `--bin` | | `--align-tail` | `128` | Tail-padding alignment for `--bin` | | `--xml` | — | Input XML instance (for `--bin`, `--test`, `--crc`) | | `--out` | stdout | Output file path | ### Companion: `configmore` | Flag | Description | |------|-------------| | `--mode test` | Emit test harness from XML + XSD | | `--mode dump` | Print textual representation of binary config blob | | `--schema` | XSD path (required for `--mode test`) | | `--header-only` | For `--mode dump`: print header only | --- ## uos-cover Toolchain Coverage analysis and certification evidence pipeline. ### uos-cins — C Source Instrumenter ```bash python3 tools/uos-cover/uos_cins.py \ --profile COV_STATEMENTS -o --uxsc ``` Profiles: `COV_STATEMENTS`, `COV_DECISIONS`, `COV_MCDC`, `COV_CALLS`, `COV_FUNCTIONS` ### uos-xst — Structural Linker ```bash python3 tools/uos-cover/uos_xst.py ... \ -o --map ``` ### uos-covparse — Coverage Dump Parser ```bash python3 tools/uos-cover/uos_covparse.py \ --map --dataset [--merge-results] ``` ### uos-covexport — Report Generator ```bash python3 tools/uos-cover/uos_covexport.py \ --fmt html -o ``` Formats: `txt`, `csv`, `xml`, `html` ### uos-justify — Justification Store ```bash # Add a justification python3 tools/uos-cover/uos_justify.py add \ --file src/sched.cpp --function schedule \ --title "Dead code in error path" --class COV_DECISIONS # List justifications python3 tools/uos-cover/uos_justify.py list --file src/sched.cpp # Export python3 tools/uos-cover/uos_justify.py export --format xml -o ./justifications/ ``` ### uos-trace — Traceability Matrix ```bash python3 tools/uos-cover/uos_trace.py generate \ --requirements reqs.md --umdb \ --format html -o ``` ### uos-verify — DO-178C Verification Plan ```bash python3 tools/uos-cover/uos_verify.py plan \ --module scheduler --dal B --profile COV_STATEMENTS \ -o verification_plan.md ``` DAL levels: A, B, C, D, E ### uos-package — Evidence Packager ```bash python3 tools/uos-cover/uos_package.py \ --umdb \ --justifications ./justifications/ \ --traceability \ --verification-plan \ -o ./evidence/ ``` ### uos-cover — Project Driver (Orchestrator) ```bash python3 tools/uos-cover/uos_cover.py run --dataset python3 tools/uos-cover/uos_cover.py report -o report.html python3 tools/uos-cover/uos_cover.py instrument ``` --- ## uos-pkg Toolchain RPM 4.2-compatible package management tooling. ### uos-pkg — Package Tool (Macro Engine) ```bash # Evaluate a macro expression python3 tools/uos-pkg/uos-pkg.py eval "%{name}-%{version}" # Show resolved macro configuration python3 tools/uos-pkg/uos-pkg.py showrc ``` ### uos-build — RPM Build Engine ```bash python3 tools/uos-pkg/uos_build.py [-bp|-bc|-bi|-ba|-bb|-bs] ``` | Flag | Stages | |------|--------| | `-bp` | Prep only | | `-bc` | Prep + build | | `-bi` | Prep + build + install | | `-ba` | Full build (all stages + source + binary RPMs) | | `-bb` | Binary RPM only | | `-bs` | Source RPM only | ### uos-spec-parser — Spec File Parser ```bash python3 tools/uos-pkg/uos_spec_parser.py --validate ``` Parses `.spec` files with preamble tags, `%define`/`%global` macros, section blocks (`%prep`, `%build`, `%install`, `%files`, `%changelog`), `%if`/`%else`/`%endif` conditionals, and macro expansion.