doc: Adding ivshmem general and API documentation

A quick summary on what is ivshmem and its Zephyr driver API.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2020-12-09 12:46:38 +01:00 committed by Anas Nashif
commit e9cf9d0325
4 changed files with 65 additions and 0 deletions

View file

@ -34,3 +34,4 @@ API Reference
util/index.rst
settings/index.rst
timing_functions/index.rst
virtualization/index.rst

View file

@ -0,0 +1,9 @@
.. _virtualization_reference:
Virtualization
##############
.. toctree::
:maxdepth: 1
ivshmem.rst

View file

@ -0,0 +1,45 @@
.. _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 <https://projectacrn.github.io/latest/tutorials/using_zephyr_as_uos.html>`_
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
<https://www.qemu.org/docs/master/system/ivshmem.html>`_ for more information.
Support
*******
Zephyr supports both version: plain and doorbell. Ivshmem driver can be build
by enabling :option:`CONFIG_IVSHMEM`. By default, this will expose the plain
version. :option:`CONFIG_IVSHMEM_DOORBELL` needs no be enabled to get the
doorbell version.
Because the doorbell version uses MSI-X vectors to support notification vectors,
the :option:`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 :option:`CONFIG_IVSHMEM_SHELL`.
API Reference
*************
.. doxygengroup:: ivshmem
:project: Zephyr

View file

@ -7,6 +7,12 @@
#ifndef ZEPHYR_INCLUDE_DRIVERS_VIRTUALIZATION_IVSHMEM_H_
#define ZEPHYR_INCLUDE_DRIVERS_VIRTUALIZATION_IVSHMEM_H_
/**
* @brief ivshmem reference API
* @defgroup ivshmem ivshmem reference API
* @{
*/
#include <zephyr/types.h>
#include <stddef.h>
#include <device.h>
@ -131,4 +137,8 @@ static inline int ivshmem_register_handler(const struct device *dev,
}
#endif
/**
* @}
*/
#endif /* ZEPHYR_INCLUDE_DRIVERS_VIRTUALIZATION_IVSHMEM_H_ */