14e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park/** @addtogroup MCD_MCDIMPL_DAEMON_KERNEL 24e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * @{ 34e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * @file 44e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * 54e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * MobiCore Driver Kernel Module Interface. 64e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * 74e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * <!-- Copyright Giesecke & Devrient GmbH 2009 - 2012 --> 89081ca65cb7959b6a06ba44823f84a6afa8bca2fJihyun Kim * 94e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * Redistribution and use in source and binary forms, with or without 104e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * modification, are permitted provided that the following conditions 114e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * are met: 124e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * 1. Redistributions of source code must retain the above copyright 134e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * notice, this list of conditions and the following disclaimer. 144e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * 2. Redistributions in binary form must reproduce the above copyright 154e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * notice, this list of conditions and the following disclaimer in the 164e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * documentation and/or other materials provided with the distribution. 174e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * 3. The name of the author may not be used to endorse or promote 184e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * products derived from this software without specific prior 194e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * written permission. 204e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * 214e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 224e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 234e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 244e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 254e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 264e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 274e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 284e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 294e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 304e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 314e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 324e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park */ 334e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park#ifndef CMCKMOD_H_ 344e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park#define CMCKMOD_H_ 354e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park 364e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park#include <stdint.h> 374e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park 384e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park#include "McTypes.h" 394e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park#include "CKMod.h" 404e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park 414e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park 424e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park/** 434e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park * As this is also used by the ClientLib, we do not use exceptions. 444e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park */ 457b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kimclass CMcKMod : public CKMod 467b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim{ 474e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Parkpublic: 487b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim /** 497b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * Map data. 507b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * 517b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param len 527b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param pHandle 537b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param pVirtAddr 547b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param pPhysAddr 557b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * 567b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @return 0 if all went fine 577b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @return MC_DRV_ERR_KMOD_NOT_OPEN 587b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @return MC_DRV_ERR_KERNEL_MODULE or'ed with errno<<16 597b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim */ 607b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t mapWsm(uint32_t len, 617b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t *pHandle, 627b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t *pVirtAddr, 637b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t *pPhysAddr); 647b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim /** 657b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * Map data. 667b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * 677b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param len 687b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param pHandle 697b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param pVirtAddr 707b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param pPhysAddr 717b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @param pMciReuse [in|out] set to true [in] for reusing MCI buffer 727b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * is set to true [out] if MCI buffer has been reused 737b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @return 0 if all went fine 747b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @return MC_DRV_ERR_KMOD_NOT_OPEN 757b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * @return MC_DRV_ERR_KERNEL_MODULE or'ed with errno<<16 767b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim */ 777b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t mapMCI( 787b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t len, 797b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t *pHandle, 807b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t *pVirtAddr, 817b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t *pPhysAddr, 827b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim bool *pReuse); 837b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 847b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim /** 857b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * Map persistent WSM which will not be freed up once the calling process dies. 867b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim */ 877b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t mapPersistent( 887b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t len, 897b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t *pHandle, 907b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t *pVirtAddr, 917b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t *pPhysAddr); 927b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 937b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim int read(addr_t buffer, uint32_t len); 947b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 957b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim bool waitSSIQ(uint32_t *pCnt); 967b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 977b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim int fcInit(uint32_t nqOffset, 987b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t nqLength, 997b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t mcpOffset, 1007b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t mcpLength); 1017b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1027b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim int fcInfo( 1037b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t extInfoId, 1047b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t *pState, 1057b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t *pExtInfo); 1067b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1077b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim int fcYield(void); 1087b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1097b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim int fcNSIQ(void); 1107b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1117b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t free(uint32_t handle, addr_t buffer, uint32_t len); 1127b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1137b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t registerWsmL2( 1147b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t buffer, 1157b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t len, 1167b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t pid, 1177b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim uint32_t *pHandle, 1187b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t *pPhysWsmL2); 1197b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1207b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t unregisterWsmL2(uint32_t handle); 1217b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1227b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t lockWsmL2(uint32_t handle); 1237b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1247b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t unlockWsmL2(uint32_t handle); 1257b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1267b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t cleanupWsmL2(void); 1277b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1287b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim addr_t findWsmL2(uint32_t handle); 1297b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1307b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim mcResult_t findContiguousWsm(uint32_t handle, addr_t *phys, uint32_t *len); 1317b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1327b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim /** 1337b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim * Tell stub to start MobiCore from given physical address 1347b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim */ 1357b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim int fcExecute(addr_t startAddr, uint32_t areaLength); 1367b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim 1377b143edf281bed18c8ebd0733465f3af5af327ebJungtae Kim bool checkVersion(void); 1384e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park}; 1394e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park 1404e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Parktypedef CMcKMod *CMcKMod_ptr; 1414e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park 1424e9e8c9c0169b40318386436d762c3d73cf4c328DongJin Park#endif // CMCKMOD_H_ 143