Home | History | Annotate | Download | only in public
      1 /** @addtogroup MCD_MCDIMPL_DAEMON
      2  * @{
      3  * @file
      4  *
      5  * <!-- Copyright Giesecke & Devrient GmbH 2009 - 2012 -->
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  * 3. The name of the author may not be used to endorse or promote
     16  *    products derived from this software without specific prior
     17  *    written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
     20  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     23  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     25  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     27  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 #ifndef MCDAEMON_H_
     32 #define MCDAEMON_H_
     33 
     34 #include <inttypes.h>      // ANSI C99
     35 
     36 
     37 #define SOCK_PATH "#mcdaemon"
     38 #include "mcUuid.h"
     39 #include "mcVersionInfo.h"
     40 
     41 typedef enum {
     42     MC_DRV_CMD_PING                 = 0,
     43     MC_DRV_CMD_GET_INFO             = 1,
     44     MC_DRV_CMD_OPEN_DEVICE          = 2,
     45     MC_DRV_CMD_CLOSE_DEVICE         = 3,
     46     MC_DRV_CMD_NQ_CONNECT           = 4,
     47     MC_DRV_CMD_OPEN_SESSION         = 5,
     48     MC_DRV_CMD_CLOSE_SESSION        = 6,
     49     MC_DRV_CMD_NOTIFY               = 7,
     50     MC_DRV_CMD_MAP_BULK_BUF         = 8,
     51     MC_DRV_CMD_UNMAP_BULK_BUF       = 9,
     52     MC_DRV_CMD_GET_VERSION          = 10,
     53     MC_DRV_CMD_GET_MOBICORE_VERSION = 11,
     54 } mcDrvCmd_t;
     55 
     56 typedef struct {
     57     uint32_t  commandId;
     58 } mcDrvCommandHeader_t;
     59 
     60 typedef struct {
     61     /* MobiCore Daemon uses Client API return codes also in commands between Daemon and Client Library. */
     62     uint32_t  responseId;
     63 } mcDrvResponseHeader_t;
     64 
     65 #define MC_DEVICE_ID_DEFAULT    0 /**< The default device ID */
     66 
     67 
     68 //--------------------------------------------------------------
     69 struct MC_DRV_CMD_OPEN_DEVICE_struct {
     70     uint32_t  commandId;
     71     uint32_t  deviceId;
     72 };
     73 
     74 typedef struct {
     75     mcDrvResponseHeader_t        header;
     76 } mcDrvRspOpenDevice_t;
     77 
     78 //--------------------------------------------------------------
     79 struct MC_DRV_CMD_CLOSE_DEVICE_struct {
     80     uint32_t  commandId;
     81 };
     82 
     83 typedef struct {
     84     mcDrvResponseHeader_t         header;
     85 } mcDrvRspCloseDevice_t;
     86 
     87 //--------------------------------------------------------------
     88 struct MC_DRV_CMD_OPEN_SESSION_struct {
     89     uint32_t  commandId;
     90     uint32_t  deviceId;
     91     mcUuid_t  uuid;
     92     uint32_t  tci;
     93     uint32_t  handle;
     94     uint32_t  len;
     95 };
     96 
     97 typedef struct {
     98     uint32_t  sessionId;
     99     uint32_t  deviceSessionId;
    100     uint32_t  sessionMagic;
    101 } mcDrvRspOpenSessionPayload_t, *mcDrvRspOpenSessionPayload_ptr;
    102 
    103 typedef struct {
    104     mcDrvResponseHeader_t         header;
    105     mcDrvRspOpenSessionPayload_t  payload;
    106 } mcDrvRspOpenSession_t;
    107 
    108 
    109 //--------------------------------------------------------------
    110 struct MC_DRV_CMD_CLOSE_SESSION_struct {
    111     uint32_t  commandId;
    112     uint32_t  sessionId;
    113 };
    114 
    115 typedef struct {
    116     mcDrvResponseHeader_t         header;
    117 } mcDrvRspCloseSession_t;
    118 
    119 
    120 //--------------------------------------------------------------
    121 struct MC_DRV_CMD_NOTIFY_struct {
    122     uint32_t  commandId;
    123     uint32_t  sessionId;
    124 };
    125 
    126 // Notify does not have a response
    127 
    128 //--------------------------------------------------------------
    129 struct MC_DRV_CMD_MAP_BULK_BUF_struct {
    130     uint32_t  commandId;
    131     uint32_t  sessionId;
    132     uint32_t  handle;
    133     uint32_t  pAddrL2;
    134     uint32_t  offsetPayload;
    135     uint32_t  lenBulkMem;
    136 };
    137 
    138 typedef struct {
    139     uint32_t  sessionId;
    140     uint32_t  secureVirtualAdr;
    141 } mcDrvRspMapBulkMemPayload_t, *mcDrvRspMapBulkMemPayload_ptr;
    142 
    143 typedef struct {
    144     mcDrvResponseHeader_t        header;
    145     mcDrvRspMapBulkMemPayload_t  payload;
    146 } mcDrvRspMapBulkMem_t;
    147 
    148 
    149 //--------------------------------------------------------------
    150 struct MC_DRV_CMD_UNMAP_BULK_BUF_struct {
    151     uint32_t  commandId;
    152     uint32_t  sessionId;
    153     uint32_t  handle;
    154     uint32_t  secureVirtualAdr;
    155     uint32_t  lenBulkMem;
    156 };
    157 
    158 typedef struct {
    159     mcDrvResponseHeader_t          header;
    160 } mcDrvRspUnmapBulkMem_t;
    161 
    162 
    163 //--------------------------------------------------------------
    164 struct MC_DRV_CMD_NQ_CONNECT_struct {
    165     uint32_t  commandId;
    166     uint32_t  deviceId;
    167     uint32_t  sessionId;
    168     uint32_t  deviceSessionId;
    169     uint32_t  sessionMagic; //Random data
    170 };
    171 
    172 typedef struct {
    173     mcDrvResponseHeader_t       header;
    174 } mcDrvRspNqConnect_t;
    175 
    176 //--------------------------------------------------------------
    177 struct MC_DRV_CMD_GET_VERSION_struct {
    178     uint32_t commandId;
    179 };
    180 
    181 typedef struct {
    182     uint32_t responseId;
    183     uint32_t version;
    184 } mcDrvRspGetVersion_t;
    185 
    186 //--------------------------------------------------------------
    187 struct MC_DRV_CMD_GET_MOBICORE_VERSION_struct {
    188     uint32_t  commandId;
    189 };
    190 
    191 
    192 typedef struct {
    193     mcVersionInfo_t versionInfo;
    194 } mcDrvRspGetMobiCoreVersionPayload_t, *mcDrvRspGetMobiCoreVersionPayload_ptr;
    195 
    196 typedef struct {
    197     mcDrvResponseHeader_t       header;
    198     mcDrvRspGetMobiCoreVersionPayload_t payload;
    199 } mcDrvRspGetMobiCoreVersion_t;
    200 
    201 //--------------------------------------------------------------
    202 typedef union {
    203     mcDrvCommandHeader_t                header;
    204     MC_DRV_CMD_OPEN_DEVICE_struct       mcDrvCmdOpenDevice;
    205     MC_DRV_CMD_CLOSE_DEVICE_struct      mcDrvCmdCloseDevice;
    206     MC_DRV_CMD_OPEN_SESSION_struct      mcDrvCmdOpenSession;
    207     MC_DRV_CMD_CLOSE_SESSION_struct     mcDrvCmdCloseSession;
    208     MC_DRV_CMD_NQ_CONNECT_struct        mcDrvCmdNqConnect;
    209     MC_DRV_CMD_NOTIFY_struct            mcDrvCmdNotify;
    210     MC_DRV_CMD_MAP_BULK_BUF_struct      mcDrvCmdMapBulkMem;
    211     MC_DRV_CMD_UNMAP_BULK_BUF_struct    mcDrvCmdUnmapBulkMem;
    212     MC_DRV_CMD_GET_VERSION_struct       mcDrvCmdGetVersion;
    213     MC_DRV_CMD_GET_MOBICORE_VERSION_struct  mcDrvCmdGetMobiCoreVersion;
    214 } mcDrvCommand_t, *mcDrvCommand_ptr;
    215 
    216 typedef union {
    217     mcDrvResponseHeader_t        header;
    218     mcDrvRspOpenDevice_t         mcDrvRspOpenDevice;
    219     mcDrvRspCloseDevice_t        mcDrvRspCloseDevice;
    220     mcDrvRspOpenSession_t        mcDrvRspOpenSession;
    221     mcDrvRspCloseSession_t       mcDrvRspCloseSession;
    222     mcDrvRspNqConnect_t          mcDrvRspNqConnect;
    223     mcDrvRspMapBulkMem_t         mcDrvRspMapBulkMem;
    224     mcDrvRspUnmapBulkMem_t       mcDrvRspUnmapBulkMem;
    225     mcDrvRspGetVersion_t         mcDrvRspGetVersion;
    226     mcDrvRspGetMobiCoreVersion_t mcDrvRspGetMobiCoreVersion;
    227 } mcDrvResponse_t, *mcDrvResponse_ptr;
    228 
    229 #endif /* MCDAEMON_H_ */
    230 
    231 /** @} */
    232