libsel4vmmplatsupport: Updated README Updated README with further information regarding current features and potential future features.
diff --git a/libsel4vmmplatsupport/README.md b/libsel4vmmplatsupport/README.md index 670aa71..a5e1ecf 100644 --- a/libsel4vmmplatsupport/README.md +++ b/libsel4vmmplatsupport/README.md
@@ -12,12 +12,70 @@ # libsel4vmmplatsupport -A library containing various VMM utilities and drivers that can be -used to construct a Guest VM on a supported platform. This library makes use of 'libsel4vm' to implement VMM -support. -This is a consolidated library composed of libraries previously known as (but now deprecated) 'libsel4vmm' (x86), -'libsel4arm-vmm' (arm), libsel4vmmcore and libsel4pci. - +A library containing various VMM utilities and drivers that can be used to construct a Guest VM on a supported platform. +This library makes use of 'libsel4vm' to implement VMM support. Reference implementations using this library are: * CAmkES VM (x86) - https://github.com/seL4/camkes-vm * CAmkES ARM VM (arm) - https://github.com/SEL4PROJ/camkes-arm-vm + +For documentation on the libsel4vmmplatsupport interface see [here](docs/) + +### Features +* Virtio Support/Drivers + * Virtio PCI + * Virtio Console + * Virtio Net +* Cross VM connection/communication driver +* Guest image loading utilities (e.g. kernel, initramfs) +* `libsel4vm` memory helpers and utilities +* IOPorts management interface + +#### Architecture Specific Features + +##### ARM +* VCPU fault handler module + * HSR/Exception decoding + * HSR/Exception handler dispatching + * SMC decoding + handling +* PSCI handlers - through VCPU fault (+SMC handler) interface +* Generic virtual device interfaces + * Generic access controlled devices - control read/write privileges to specific devices + * Generic forwarding devices - interfaces for dispatching faults to external handlers +* Guest reboot utilities +* Virtual USB driver +* Guest OS Boot interfaces (for Linux VM's) : Boot VCPU initialisation + +##### X86 +* ACPI table generation +* PCI device passthrough helpers +* Guest OS Boot interfaces (for Linux VM's) : Boot VCPU initialisation, BIOS boot info structure generation, E820 map generation, VESA initialisation + +#### Platform Specific Features + +##### Exynos5422 +* Virtual Clock device driver (Access Controlled Device) +* Virtual IRQ combiner device driver +* Virtual GPIO device driver +* Virtual Power device driver +* Virtual MCT device driver +* Virtual UART UART device driver + +#### TK1 +* USB Reboot Hooks + +### Potential future features (yet to be implemented) + +* Additional Virtio Driver Support + * e.g Virtio Blk, Virtio RNG, Virtio Balloon +* Block Driver support + +#### Architecture Specific Features +##### ARM +* Additional virtual devices for various supported platforms +* Additional platform/board support +##### x86 +* Generic virtual device interface (as supported on ARM platforms) +* Additional virtual device support + +*Note: This is a consolidated library composed of libraries previously known as (but now deprecated) 'libsel4vmm' (x86), +'libsel4arm-vmm' (arm), libsel4vmmcore and libsel4pci.*
diff --git a/libsel4vmmplatsupport/docs/README.md b/libsel4vmmplatsupport/docs/README.md new file mode 100644 index 0000000..4dd2e70 --- /dev/null +++ b/libsel4vmmplatsupport/docs/README.md
@@ -0,0 +1,44 @@ +<!-- + Copyright 2020, Data61 + Commonwealth Scientific and Industrial Research Organisation (CSIRO) + ABN 41 687 119 230. + + This software may be distributed and modified according to the terms of + the BSD 2-Clause license. Note that NO WARRANTY is provided. + See "LICENSE_BSD2.txt" for details. + + @TAG(DATA61_BSD) +--> + +# libsel4vmmplatsupport docs + +See below for usage documentation on various libsel4vmmplatsupport interfaces: + +### Common Interfaces +* [sel4vmmplatsupport/device.h](libsel4vmmplatsupport_device.md): Provides a series of datastructures and helpers to manage VMM devices. +* [sel4vmmplatsupport/device_utils.h](libsel4vmmplatsupport_device_utils.md): Provides various helpers to establish different types devices for a given VM instance +* [sel4vmmplatsupport/guest_image.h](libsel4vmmplatsupport_guest_image.md): Provides general utilites to load guest vm images (e.g. kernel, initrd, modules) +* [sel4vmmplatsupport/guest_memory_util.h](libsel4vmmplatsupport_guest_memory_util.md): Provides various utilities and helpers for using the libsel4vm guest memory interface +* [sel4vmmplatsupport/guest_vcpu_util.h](libsel4vmmplatsupport_guest_vcpu_util.md): Provides abstractions and helpers for managing libsel4vm vcpus +* [sel4vmmplatsupport/ioports.h](libsel4vmmplatsupport_ioports.md): Useful abstraction for initialising, registering and handling ioport events for a guest VM instance +* [sel4vmmplatsupport/drivers/cross_vm_connection.h](libsel4vmmplatsupport_cross_vm_connection.md): Facilitates the creation of communication channels between VM's and other components on a seL4-based system +* [sel4vmmplatsupport/drivers/pci.h](libsel4vmmplatsupport_pci.md): Interface presents a VMM PCI Driver, which manages the host's PCI devices, and handles guest OS PCI config space read & writes +* [sel4vmmplatsupport/drivers/pci_helper.h](libsel4vmmplatsupport_pci_helper.md): This interface presents a series of helpers when using the VMM PCI Driver +* [sel4vmmplatsupport/drivers/virtio_con.h](libsel4vmmplatsupport_virtio_con.md): This interface provides the ability to initalise a VMM virtio console driver +* [sel4vmmplatsupport/drivers/virtio_net.h](libsel4vmmplatsupport_virtio_net.md): This interface provides the ability to initalise a VMM virtio net driver + +### Architecture Specific Interfaces + +#### ARM +* [sel4vmmplatsupport/arch/generic_forward_device.h](libsel4vmmplatsupport_arm_generic_forward_device.md): This interface facilitates the creation of a virtual device used for dispatching faults to external handlers +* [sel4vmmplatsupport/arch/guest_boot_init.h](libsel4vmmplatsupport_arm_guest_boot_init.md): Provides helpers to initialise the booting state of a VM instance +* [sel4vmmplatsupport/arch/guest_reboot,h](libsel4vmmplatsupport_arm_guest_reboot.md): Provides a series of helpers for registering callbacks when rebooting the VMM +* [sel4vmmplatsupport/arch/guest_vcpu_fault.h](libsel4vmmplatsupport_arm_guest_vcpu_fault.md): Provides a module for registering and processing ARM vcpu faults +* [sel4vmmplatsupport/arch/guest_vcpu_util.h](libsel4vmmplatsupport_arm_guest_vcpu_util.md): Provides abstractions and helpers for managing libsel4vm vcpus on an ARM platform +* [sel4vmmplatsupport/arch/vpci.h](libsel4vmmplatsupport_arm_vpci.md): Presents a Virtual PCI driver for ARM-based VM's +* [sel4vmmplatsupport/arch/vusb.h](libsel4vmmplatsupport_arm_vusb.md): Presents a Virtual USB driver for ARM-based VM's +* [sel4vmmplatsupport/arch/ac_device.h](libsel4vmmplatsupport_arm_ac_device.md): Facilitates the creation of generic virtual devices in a VM instance with access control permissions over the devices addressable memory +#### X86 +* [sel4vmmplatsupport/arch/acpi.h](libsel4vmmplatsupport_x86_acpi.md): Provides support for generating ACPI table in a guest x86 VM +* [sel4vmmplatsupport/arch/guest_boot_init.h](libsel4vmmplatsupport_x86_guest_boot_init.md): Provides helpers to initialise the booting state of a VM instance +* [sel4vmmplatsupport/arch/drivers/vmm_pci_helper.h](libsel4vmmplatsupport_x86_vmm_pci_helper.md): Interface presents a series of helpers for establishing VMM PCI support on x86 platforms