/** @mainpage MobiCore Control Interface - MCI | |
* | |
* <h2>Introduction</h2> | |
* The MobiCore Control Interface (MCI) is the interface for integrating G&D MobiCore technology into the | |
* rich operating system running in the non-secure part of an ARM TrustZone enabled platform. | |
* | |
* <h2>Interface overview</h2> | |
* The Structure of the MobiCore control interface is depicted in the figure below: | |
* @image html DoxyOverviewMci500x.png "MobiCore control interface" | |
* @image latex DoxyOverviewMci500x.png "MobiCore control interface" width=12cm | |
* | |
* The MCI is composed of the following interfaces: | |
* <ul> | |
* | |
* <li><b>MobiCore control protocol (MCP) interface.</b></li><br> | |
* The MCP interface is responsible for the main communicating with the MobiCore. This involves sending commands for starting | |
* and stopping of Trustlets as well as checking their corresponding answers. MCP information is exchanged in a | |
* world shared memory buffer which needs to be initially established between NWd and SWd using the FastCall interface.<br> | |
* | |
* <li><b>Notification queue interface.</b></li><br> | |
* Notifications inform the MobiCore runtime environment that information is pending in a WSM buffer. | |
* The Trustlet Connector (TLC) and the corresponding Trustlet also utilize this buffer to | |
* notify each other about new data within the Trustlet Connector Interface (TCI). Therefore the TLC writes | |
* a notification including the session ID to the buffer. The driver informs the MobiCore | |
* about the availability of a notification with the use of a SIQ. On the secure side the Runtime Management | |
* notifies the Trustlet, according to the given session ID, about the availability of new data. | |
* The same mechanism is used vice versa for writing data back to the None-secure world. | |
* | |
* <li><b>FastCall interface.</b></li><br> | |
* The FastCall interface of the MobiCore system is used to transfer control from the Non-secure World (NWd) to the | |
* Secure World (SWd) and back. There are three mechanisms the NWd shall use to interact with the MobiCore Monitor: | |
* FastCall, N-SIQ and NQ-IRQ (Notification IRQ). FastCall and N-SIQ operations are used to hand over control | |
* to the MobiCore. Both functions make use of the SMC [ARM11] operation. | |
* | |
* </ul> | |
* | |
* You can find more information about the interfaces in the respective modules description. | |
* | |
* <h2>Version history</h2> | |
* <table class="customtab"> | |
* <tr><td width="100px"><b>Date</b></td><td width="80px"><b>Version</b></td><td><b>Changes</b></td></tr> | |
* <tr><td>2009-06-25</td><td>0.1</td><td>Initial Release</td></tr> | |
* <tr><td>2009-07-01</td><td>0.2</td><td>Major rewrite</td></tr> | |
* <tr><td>2009-08-06</td><td>0.3</td><td>Added documentation for FastCall helper functions</td></tr> | |
* <tr><td>2009-09-10</td><td>0.4</td><td>Update of constant naming. Modification of doxygen config.</td></tr> | |
* <tr><td>2010-03-09</td><td>0.5</td><td>Added fastCallPower() helper function for MC_FC_POWER.</td></tr> | |
* <tr><td>2010-05-10</td><td>0.6</td><td>Restructuring of load format header.</td></tr> | |
* <tr><td>2011-07-19</td><td>0.7</td><td>update to reflect current code changes.</td></tr> | |
* </table> | |
* | |
* | |
* @file | |
* @defgroup FCI FastCall Interface | |
* | |
* @defgroup NQ Notification Queue | |
* | |
* @defgroup MCP MobiCore Control Protocol | |
* | |
* | |
* <!-- Copyright Giesecke & Devrient GmbH 2009-2012 --> | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions | |
* are met: | |
* 1. Redistributions of source code must retain the above copyright | |
* notice, this list of conditions and the following disclaimer. | |
* 2. Redistributions in binary form must reproduce the above copyright | |
* notice, this list of conditions and the following disclaimer in the | |
* documentation and/or other materials provided with the distribution. | |
* 3. The name of the author may not be used to endorse or promote | |
* products derived from this software without specific prior | |
* written permission. | |
* | |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS | |
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY | |
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | |
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | |
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
*/ | |
#ifndef MCI_H_ | |
#define MCI_H_ | |
#include "version.h" | |
#include "mcifc.h" | |
#include "mcinq.h" | |
#include "mcimcp.h" | |
#endif /** MCI_H_ */ | |
/** @} */ |