Home | History | Annotate | Download | only in ClientLib
      1 /** @addtogroup MCD_IMPL_LIB
      2  * @{
      3  * @file
      4  *
      5  * Client library device management.
      6  *
      7  * Device and Trustlet Session management Functions.
      8  *
      9  * <!-- Copyright Giesecke & Devrient GmbH 2009 - 2012 -->
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions and the following disclaimer.
     16  * 2. Redistributions in binary form must reproduce the above copyright
     17  *    notice, this list of conditions and the following disclaimer in the
     18  *    documentation and/or other materials provided with the distribution.
     19  * 3. The name of the author may not be used to endorse or promote
     20  *    products derived from this software without specific prior
     21  *    written permission.
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
     24  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     25  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
     27  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
     29  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     30  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     31  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     32  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     33  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     34  */
     35 #ifndef DEVICE_H_
     36 #define DEVICE_H_
     37 
     38 #include <stdint.h>
     39 #include <vector>
     40 
     41 #include "public/MobiCoreDriverApi.h"
     42 #include "Session.h"
     43 #include "CWsm.h"
     44 
     45 
     46 class Device
     47 {
     48 
     49 private:
     50     sessionList_t   sessionList; /**< MobiCore Trustlet session associated with the device */
     51     wsmList_t       wsmL2List; /**< WSM L2 Table  */
     52 
     53 
     54 public:
     55     uint32_t     deviceId; /**< Device identifier */
     56     Connection   *connection; /**< The device connection */
     57     CMcKMod_ptr  pMcKMod;
     58 
     59     Device(
     60         uint32_t    deviceId,
     61         Connection  *connection
     62     );
     63 
     64     virtual ~Device(
     65         void
     66     );
     67 
     68     /**
     69      * Open the device.
     70      * @param deviceName Name of the kernel modules device file.
     71      * @return true if the device has been opened successfully
     72      */
     73     bool open(
     74         const char *deviceName
     75     );
     76 
     77     /**
     78      * Closes the device.
     79      */
     80     void close(
     81         void
     82     );
     83 
     84     /**
     85      * Check if the device has open sessions.
     86      * @return true if the device has one or more open sessions.
     87      */
     88     bool hasSessions(
     89         void
     90     );
     91 
     92     /**
     93      * Add a session to the device.
     94      * @param sessionId session ID
     95      * @param connection session connection
     96      */
     97     void createNewSession(
     98         uint32_t    sessionId,
     99         Connection  *connection
    100     );
    101 
    102     /**
    103      * Remove the specified session from the device.
    104      * The session object will be destroyed and all resources associated with it will be freed.
    105      *
    106      * @param sessionId Session of the session to remove.
    107      * @return true if a session has been found and removed.
    108      */
    109     bool removeSession(
    110         uint32_t sessionId
    111     );
    112 
    113     /**
    114      * Get as session object for a given session ID.
    115      * @param sessionId Identified of a previously opened session.
    116      * @return Session object if available or NULL if no session has been found.
    117      */
    118     Session *resolveSessionId(
    119         uint32_t sessionId
    120     );
    121 
    122     /**
    123      * Allocate a block of contiguous WSM.
    124      * @param len The virtual address to be registered.
    125      * @param wsm The CWsm object of the allocated memory.
    126      * @return MC_DRV_OK if successful.
    127      */
    128     mcResult_t allocateContiguousWsm(
    129         uint32_t len,
    130         CWsm **wsm
    131     );
    132 
    133     /**
    134      * Unregister a vaddr from a device.
    135      * @param vaddr The virtual address to be registered.
    136      * @param paddr The physical address to be registered.
    137      */
    138     mcResult_t freeContiguousWsm(
    139         CWsm_ptr  pWsm
    140     );
    141 
    142     /**
    143      * Get a WSM object for a given virtual address.
    144      * @param vaddr The virtual address which has been allocate with mcMallocWsm() in advance.
    145      * @return the WSM object or NULL if no address has been found.
    146      */
    147     CWsm_ptr findContiguousWsm(
    148         addr_t  virtAddr
    149     );
    150 
    151 };
    152 
    153 #endif /* DEVICE_H_ */
    154 
    155 /** @} */
    156