.. _ivshmem_driver: Inter-VM Shared Memory ###################### .. contents:: :local: :depth: 2 Overview ******** As Zephyr is enabled to run as a guest OS on Qemu and `ACRN `_ it might be necessary to make VMs aware of each other, or aware of the host. This is made possible by exposing a shared memory among parties via a feature called ivshmem, which stands for inter-VM Shared Memory. The Two types are supported: a plain shared memory (ivshmem-plain) or a shared memory with the ability for a VM to generate an interruption on another, and thus to be interrupted as well itself (ivshmem-doorbell). Please refer to the official `Qemu ivshmem documentation `_ for more information. Support ******* Zephyr supports both version: plain and doorbell. Ivshmem driver can be build by enabling :kconfig:`CONFIG_IVSHMEM`. By default, this will expose the plain version. :kconfig:`CONFIG_IVSHMEM_DOORBELL` needs to be enabled to get the doorbell version. Because the doorbell version uses MSI-X vectors to support notification vectors, the :kconfig:`CONFIG_IVSHMEM_MSI_X_VECTORS` has to be tweaked to the amount of vectors that will be needed. Note that a tiny shell module can be exposed to test the ivshmem feature by enabling :kconfig:`CONFIG_IVSHMEM_SHELL`. API Reference ************* .. doxygengroup:: ivshmem