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