• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3  * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice, this list of
9  *    conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12  *    of conditions and the following disclaimer in the documentation and/or other materials
13  *    provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16  *    to endorse or promote products derived from this software without specific prior written
17  *    permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #include "mem.h"
33 #include <securec.h>
34 #include "agent.h"
35 #include "mailbox_mempool.h"
36 #include "tc_ns_client.h"
37 #include "tc_ns_log.h"
38 #include "teek_ns_client.h"
39 #include "tzdriver_compat.h"
40 
TcMemFree(TcNsSharedMem * sharedMem)41 void TcMemFree(TcNsSharedMem *sharedMem)
42 {
43     if (sharedMem == NULL) {
44         return;
45     }
46 
47     if (sharedMem->kernelAddr != NULL) {
48         LOS_VFree(sharedMem->kernelAddr);
49         sharedMem->kernelAddr = NULL;
50     }
51     free(sharedMem);
52 }
53 
TcMemAllocate(size_t len)54 TcNsSharedMem *TcMemAllocate(size_t len)
55 {
56     TcNsSharedMem *sharedMem = NULL;
57     void *addr = NULL;
58 
59     sharedMem = calloc(1, sizeof(*sharedMem));
60     if (ZERO_OR_NULL_PTR((unsigned long)(uintptr_t)sharedMem)) {
61         tloge("sharedMem malloc failed\n");
62         return ERR_PTR(-ENOMEM);
63     }
64 
65     len = ALIGN(len, SZ_4K);
66     if (len > MAILBOX_POOL_SIZE) {
67         tloge("alloc sharemem size(%zu) is too large\n", len);
68         free(sharedMem);
69         return ERR_PTR(-EINVAL);
70     }
71 
72     addr = LOS_VMalloc(len);
73     if (addr == NULL) {
74         tloge("alloc mailbox failed\n");
75         free(sharedMem);
76         return ERR_PTR(-ENOMEM);
77     }
78     sharedMem->kernelAddr = addr;
79     sharedMem->len = len;
80     sharedMem->userAddr = NULL;
81     sharedMem->userAddrCa = NULL;
82     atomic_set(&sharedMem->usage, 0);
83     return sharedMem;
84 }
85 
TcMemInit(void)86 int TcMemInit(void)
87 {
88     int ret;
89 
90     tlogi("TcMemInit\n");
91 
92     ret = MailboxMempoolInit();
93     if (ret) {
94         tloge("tz mailbox init failed\n");
95         return -ENOMEM;
96     }
97 
98     return 0;
99 }
100 
TcMemDestroy(void)101 void TcMemDestroy(void)
102 {
103     tlogi("tc_client exit\n");
104 
105     MailboxMempoolDestroy();
106 }
107