aboutsummaryrefslogtreecommitdiffstats
path: root/src/framework/mem/basic_mem/dmm_memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/framework/mem/basic_mem/dmm_memory.h')
-rw-r--r--src/framework/mem/basic_mem/dmm_memory.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/framework/mem/basic_mem/dmm_memory.h b/src/framework/mem/basic_mem/dmm_memory.h
new file mode 100644
index 0000000..6fc6a24
--- /dev/null
+++ b/src/framework/mem/basic_mem/dmm_memory.h
@@ -0,0 +1,126 @@
+/*
+*
+* Copyright (c) 2018 Huawei Technologies Co.,Ltd.
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at:
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef _DMM_MEMORY_H_
+#define _DMM_MEMORY_H_
+#include <stdio.h>
+#include <stdarg.h>
+#include "dmm_share.h"
+#include "dmm_segment.h"
+#include "dmm_ring.h"
+#include "nstack_securec.h"
+
+#define DMM_MEMORY_MODULE "DMM_MEMORY_MODULE"
+
+extern struct dmm_segment *main_seg;
+extern struct dmm_segment *base_seg;
+
+inline static void dmm_lock_map()
+{
+ dmm_seg_lock(base_seg);
+}
+
+inline static void dmm_unlock_map()
+{
+ dmm_seg_unlock(base_seg);
+}
+
+inline static int dmm_unmap(void *mem)
+{
+ return dmm_mem_unmap(base_seg, mem);
+}
+
+inline static void *dmm_locked_map(size_t size,
+ const char name[DMM_MEM_NAME_SIZE])
+{
+ void *mem;
+ dmm_lock_map();
+ mem = dmm_mem_map(base_seg, size, name);
+ dmm_unlock_map();
+ return mem;
+}
+
+inline static void *dmm_map(size_t size, const char name[DMM_MEM_NAME_SIZE])
+{
+ return dmm_mem_map(base_seg, size, name);
+}
+
+inline static void *dmm_mapv(size_t size, const char *name_fmt, ...)
+{
+ int len;
+ char name[DMM_MEM_NAME_SIZE];
+ va_list ap;
+
+ va_start(ap, name_fmt);
+ len =
+ vsnprintf_s(name, DMM_MEM_NAME_SIZE, DMM_MEM_NAME_SIZE - 1, name_fmt,
+ ap);
+ va_end(ap);
+
+ if (len >= DMM_MEM_NAME_SIZE)
+ return NULL;
+
+ return dmm_map(size, name);
+}
+
+inline static void *dmm_lookup(const char name[DMM_MEM_NAME_SIZE])
+{
+ return dmm_mem_lookup(base_seg, name);
+}
+
+inline static void *dmm_lookupv(const char *name_fmt, ...)
+{
+ int len;
+ char name[DMM_MEM_NAME_SIZE];
+ va_list ap;
+
+ va_start(ap, name_fmt);
+ len =
+ vsnprintf_s(name, DMM_MEM_NAME_SIZE, DMM_MEM_NAME_SIZE - 1, name_fmt,
+ ap);
+ va_end(ap);
+
+ if (len >= DMM_MEM_NAME_SIZE)
+ return NULL;
+
+ return dmm_mem_lookup(base_seg, name);
+}
+
+int dmm_mem_main_init();
+int dmm_mem_main_exit();
+int dmm_mem_app_init();
+int dmm_mem_app_exit();
+
+struct dmm_ring *dmm_create_ring(int num, int flag,
+ const char name[DMM_MEM_NAME_SIZE]);
+
+struct dmm_ring *dmm_attach_ring(const char name[DMM_MEM_NAME_SIZE]);
+
+struct dmm_ring *dmm_malloc_ring(int num, int flag);
+
+struct dmm_ring *dmm_create_pool(size_t elt_size, int num, int flag,
+ const char name[DMM_MEM_NAME_SIZE]);
+
+struct dmm_ring *dmm_attach_pool(const char name[DMM_MEM_NAME_SIZE]);
+
+/* allocate pool from heap */
+struct dmm_ring *dmm_malloc_pool(size_t elt_size, int num, int flag);
+
+int dmm_mem_module_init(void *param);
+
+void dmm_share_destroy();
+
+#endif /* _DMM_MEMORY_H_ */