summaryrefslogtreecommitdiff
path: root/mobicore/daemon/Kernel/Platforms/Generic/CMcKMod.h
blob: a3264682085636009b3a1f71eac8420bc87f10ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/** @addtogroup MCD_MCDIMPL_DAEMON_KERNEL
 * @{
 * @file
 *
 * <t-base Driver Kernel Module Interface.
 *
 *
 * Copyright (c) 2013 TRUSTONIC LIMITED
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * 3. Neither the name of the TRUSTONIC LIMITED nor the names of its
 *    contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#ifndef CMCKMOD_H_
#define CMCKMOD_H_

#include <stdint.h>

#include "McTypes.h"
#include "CKMod.h"


/**
 * As this is also used by the ClientLib, we do not use exceptions.
 */
class CMcKMod : public CKMod
{
public:
    /**
    * Map data.
    *
    * @param len
    * @param pHandle
    * @param pVirtAddr
    * @param pPhysAddr
    *
    * @return 0 if all went fine
    * @return MC_DRV_ERR_KMOD_NOT_OPEN
    * @return MC_DRV_ERR_KERNEL_MODULE or'ed with errno<<16
    */
    mcResult_t mapWsm(uint32_t  len,
                      uint32_t    *pHandle,
                      addr_t      *pVirtAddr,
                      uint64_t      *pPhysAddr);
    /**
    * Map data.
    *
    * @param len
    * @param pHandle
    * @param pVirtAddr
    * @param pPhysAddr
    * @param pMciReuse [in|out] set to true [in] for reusing MCI buffer
    *                 is set to true [out] if MCI buffer has been reused
    * @return 0 if all went fine
    * @return MC_DRV_ERR_KMOD_NOT_OPEN
    * @return MC_DRV_ERR_KERNEL_MODULE or'ed with errno<<16
    */
    mcResult_t mapMCI(
        uint32_t    len,
        uint32_t    *pHandle,
        addr_t      *pVirtAddr,
        uint64_t    *pPhysAddr,
        bool        *pReuse);

    /**
    * Map persistent WSM which will not be freed up once the calling process dies.
    */
    mcResult_t mapPersistent(
        uint32_t    len,
        uint32_t    *pHandle,
        addr_t      *pVirtAddr,
        addr_t      *pPhysAddr);

    int read(addr_t buffer, uint32_t len);

    bool waitSSIQ(uint32_t *pCnt);

    int fcInit(uint32_t    nqLength,
               uint32_t    mcpOffset,
               uint32_t    mcpLength);

    int fcInfo(
        uint32_t    extInfoId,
        uint32_t    *pState,
        uint32_t    *pExtInfo);

    int fcYield(void);

    int fcNSIQ(void);

    mcResult_t free(uint32_t handle, addr_t buffer, uint32_t len);

    mcResult_t registerWsmL2(
        addr_t      buffer,
        uint32_t    len,
        uint32_t    pid,
        uint32_t    *pHandle,
        uint64_t      *pPhysWsmL2);

    mcResult_t unregisterWsmL2(uint32_t handle);

    mcResult_t lockWsmL2(uint32_t handle);

    mcResult_t unlockWsmL2(uint32_t handle);

    mcResult_t cleanupWsmL2(void);

    uint64_t findWsmL2(uint32_t handle, int fd);

    mcResult_t findContiguousWsm(uint32_t handle, int fd, uint64_t *phys, uint32_t *len);

    mcResult_t setupLog(void);

    bool checkVersion(void);
};

typedef CMcKMod  *CMcKMod_ptr;

#endif // CMCKMOD_H_