19081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/** @addtogroup MCD_MCDIMPL_KMOD_API Mobicore Driver Module API
29081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * @ingroup  MCD_MCDIMPL_KMOD
39081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * @{
49081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Interface to Mobicore Driver Kernel Module.
59081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * @file
69081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
79081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * <h2>Introduction</h2>
89081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * The MobiCore Driver Kernel Module is a Linux device driver, which represents
99081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * the command proxy on the lowest layer to the secure world (Swd). Additional
109081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * services like memory allocation via mmap and generation of a L2 tables for
119081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * given virtual memory are also supported. IRQ functionallity receives
129081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * information from the SWd in the non secure world (NWd).
139081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * As customary the driver is handled as linux device driver with "open",
149081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * "close" and "ioctl" commands. Access to the driver is possible after the
159081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * device "/dev/mobicore" has been opened.
169081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * The MobiCore Driver Kernel Module must be installed via
179081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * "insmod mcDrvModule.ko".
189081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
199081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
209081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * <h2>Version history</h2>
219081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * <table class="customtab">
229081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * <tr><td width="100px"><b>Date</b></td><td width="80px"><b>Version</b></td>
239081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * <td><b>Changes</b></td></tr>
249081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * <tr><td>2010-05-25</td><td>0.1</td><td>Initial Release</td></tr>
259081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * </table>
269081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
279081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * <!-- Copyright Giesecke & Devrient GmbH 2010-2012 -->
289081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
299081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Redistribution and use in source and binary forms, with or without
309081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * modification, are permitted provided that the following conditions
319081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * are met:
329081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * 1. Redistributions of source code must retain the above copyright
339081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *	notice, this list of conditions and the following disclaimer.
349081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * 2. Redistributions in binary form must reproduce the above copyright
359081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *	notice, this list of conditions and the following disclaimer in the
369081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *	documentation and/or other materials provided with the distribution.
379081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * 3. The name of the author may not be used to endorse or promote
389081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *	products derived from this software without specific prior
399081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *	written permission.
409081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
419081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
429081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
439081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
449081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
459081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
469081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
479081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
489081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
499081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
509081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
519081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
529081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
539081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
549081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#ifndef _MC_LINUX_H_
559081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define _MC_LINUX_H_
569081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
579081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#include "version.h"
589081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
599081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_ADMIN_DEVNODE	"mobicore"
609081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_USER_DEVNODE		"mobicore-user"
619081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
629081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
639081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Data exchange structure of the MC_DRV_MODULE_INIT ioctl command.
649081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * INIT request data to SWD
659081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
669081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kimstruct mc_ioctl_init {
679081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	/** notification buffer start/length [16:16] [start, length] */
689081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  nq_offset;
699081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	/** length of notification queue */
709081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  nq_length;
719081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	/** mcp buffer start/length [16:16] [start, length] */
729081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  mcp_offset;
739081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	/** length of mcp buffer */
749081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  mcp_length;
759081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim};
769081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
779081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
789081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
799081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Data exchange structure of the MC_DRV_MODULE_INFO ioctl command.
809081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * INFO request data to the SWD
819081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
829081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kimstruct mc_ioctl_info {
839081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  ext_info_id; /**< extended info ID */
849081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  state; /**< state */
859081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  ext_info; /**< extended info */
869081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim};
879081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
889081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
899081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Mmap allocates and maps contiguous memory into a process.
909081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * We use the third parameter, void *offset, to distinguish between some cases
919081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * offset = MC_DRV_KMOD_MMAP_WSM	usual operation, pages are registered in
929081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *					device structure and freed later.
939081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * offset = MC_DRV_KMOD_MMAP_MCI	get Instance of MCI, allocates or mmaps
949081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *					the MCI to daemon
959081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
969081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * In mmap(), the offset specifies which of several device I/O pages is
979081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *  requested. Linux only transfers the page number, i.e. the upper 20 bits to
989081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *  kernel module. Therefore we define our special offsets as multiples of page
999081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *  size.
1009081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1019081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kimstruct mc_ioctl_map {
1029081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	size_t    len; /**<  Buffer length */
1039081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  handle; /**< WSM handle */
1049081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	unsigned long  addr; /**< Virtual address */
1059081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	unsigned long  phys_addr; /**< physical address of WSM (or NULL) */
1069081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	bool      reused; /**< if WSM memory was reused, or new allocated */
1079081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim};
1089081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1099081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1109081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Data exchange structure of the MC_IO_REG_WSM command.
1119081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *
1129081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Allocates a physical L2 table and maps the buffer into this page.
1139081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Returns the physical address of the L2 table.
1149081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * The page alignment will be created and the appropriated pSize and pOffsetL2
1159081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * will be modified to the used values.
1169081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1179081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kimstruct mc_ioctl_reg_wsm {
1189081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  buffer; /**< base address of the virtual address  */
1199081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  len; /**< size of the virtual address space */
1209081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  pid; /**< process id */
1219081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  handle; /**< driver handle for locked memory */
1229081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  table_phys; /**< physical address of the L2 table */
1239081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim};
1249081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1259081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1269081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1279081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Data exchange structure of the MC_DRV_MODULE_FC_EXECUTE ioctl command.
1289081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * internal, unsupported
1299081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1309081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kimstruct mc_ioctl_execute {
1319081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	/**< base address of mobicore binary */
1329081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  phys_start_addr;
1339081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	/**< length of DDR area */
1349081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim	uint32_t  length;
1359081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim};
1369081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1377b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim/**
1387b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * Data exchange structure of the MC_IO_RESOLVE_CONT_WSM ioctl command.
1397b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim */
1407b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kimstruct mc_ioctl_resolv_cont_wsm {
1417b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim	/**< driver handle for buffer */
1427b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim	uint32_t  handle;
1437b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim	/**< base address of memory */
1447b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim	uint32_t  phys;
1457b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim	/**< length memory */
1467b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim	uint32_t  length;
1477b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim};
1487b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim
1499081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1509081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/* @defgroup Mobicore_Driver_Kernel_Module_Interface IOCTL */
1519081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1529081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1539081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1549081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * defines for the ioctl mobicore driver module function call from user space.
1559081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1569081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/* MobiCore IOCTL magic number */
1579081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IOC_MAGIC	'M'
1589081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1599081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_INIT		_IOWR(MC_IOC_MAGIC, 0, struct mc_ioctl_init)
1609081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_INFO		_IOWR(MC_IOC_MAGIC, 1, struct mc_ioctl_info)
1619081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_VERSION		_IOR(MC_IOC_MAGIC, 2, uint32_t)
1629081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1639081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * ioctl parameter to send the YIELD command to the SWD.
1649081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Only possible in Privileged Mode.
1659081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * ioctl(fd, MC_DRV_MODULE_YIELD)
1669081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1679081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_YIELD		_IO(MC_IOC_MAGIC, 3)
1689081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1699081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * ioctl parameter to send the NSIQ signal to the SWD.
1709081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Only possible in Privileged Mode
1719081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * ioctl(fd, MC_DRV_MODULE_NSIQ)
1729081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1739081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_NSIQ		_IO(MC_IOC_MAGIC, 4)
1749081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1759081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Free's memory which is formerly allocated by the driver's mmap
1769081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * command. The parameter must be this mmaped address.
1779081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * The internal instance data regarding to this address are deleted as
1789081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * well as each according memory page and its appropriated reserved bit
1799081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * is cleared (ClearPageReserved).
1809081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Usage: ioctl(fd, MC_DRV_MODULE_FREE, &address) with address beeing of
1819081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * type long address
1829081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1839081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_FREE		_IO(MC_IOC_MAGIC, 5)
1849081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1859081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Creates a L2 Table of the given base address and the size of the
1869081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * data.
1879081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Parameter: mc_ioctl_app_reg_wsm_l2_params
1889081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
1899081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_REG_WSM		_IOWR(MC_IOC_MAGIC, 6, struct mc_ioctl_reg_wsm)
1909081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_UNREG_WSM		_IO(MC_IOC_MAGIC, 7)
1917b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim#define MC_IO_LOCK_WSM		_IO(MC_IOC_MAGIC, 8)
1929081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_UNLOCK_WSM	_IO(MC_IOC_MAGIC, 9)
1939081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_EXECUTE		_IOWR(MC_IOC_MAGIC, 10, struct mc_ioctl_execute)
1949081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
1959081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/**
1969081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * Mmap allocates and maps contiguous memory into a process.
1979081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * MC_DRV_KMOD_MMAP_WSM	usual operation, pages are registered in
1989081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *					device structure and freed later.
1999081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * MC_DRV_KMOD_MMAP_MCI	get Instance of MCI, allocates or mmaps
2009081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *					the MCI to daemon
2019081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * MC_DRV_KMOD_MMAP_PERSISTENTWSM	special operation, without
2029081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim *						registration of pages
2039081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim */
2049081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_MAP_WSM		_IOWR(MC_IOC_MAGIC, 11, struct mc_ioctl_map)
2059081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_MAP_MCI		_IOWR(MC_IOC_MAGIC, 12, struct mc_ioctl_map)
2069081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#define MC_IO_MAP_PWSM		_IOWR(MC_IOC_MAGIC, 13, struct mc_ioctl_map)
2079081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim
2087b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim/**
2097b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * Clean orphaned WSM buffers. Only available to the daemon and should
2107b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * only be carried out if the TLC crashes or otherwise calls exit() in
2117b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * an unexpected manner.
2127b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * The clean is needed toghether with the lock/unlock mechanism so the daemon
2137b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * has clear control of the mapped buffers so it can close a truslet before
2147b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * release all the WSM buffers, otherwise the trustlet would be able to write
2157b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * to possibly kernel memory areas */
2167b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim#define MC_IO_CLEAN_WSM		_IO(MC_IOC_MAGIC, 14)
2177b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim
2187b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim/** Get L2 phys address of a buffer handle allocated to the user. Only
2197b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * available to the daemon */
2207b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim#define MC_IO_RESOLVE_WSM	_IOWR(MC_IOC_MAGIC, 15, uint32_t)
2217b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim
2227b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim/** Get the phys address & len of a allocated contiguous buffer. Only available
2237b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * to the daemon */
2247b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim#define MC_IO_RESOLVE_CONT_WSM	_IOWR(MC_IOC_MAGIC, 16, struct mc_ioctl_execute)
2257b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim
2269081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim#endif /* _MC_LINUX_H_ */
2279081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim/** @} */
228