]> git.proxmox.com Git - ceph.git/blob - ceph/src/pmdk/src/include/libpmem.h
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / src / include / libpmem.h
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright 2014-2020, Intel Corporation */
3
4 /*
5 * libpmem.h -- definitions of libpmem entry points
6 *
7 * This library provides support for programming with persistent memory (pmem).
8 *
9 * libpmem provides support for using raw pmem directly.
10 *
11 * See libpmem(7) for details.
12 */
13
14 #ifndef LIBPMEM_H
15 #define LIBPMEM_H 1
16
17 #include <sys/types.h>
18
19 #ifdef _WIN32
20 #include <pmemcompat.h>
21
22 #ifndef PMDK_UTF8_API
23 #define pmem_map_file pmem_map_fileW
24 #define pmem_check_version pmem_check_versionW
25 #define pmem_errormsg pmem_errormsgW
26 #else
27 #define pmem_map_file pmem_map_fileU
28 #define pmem_check_version pmem_check_versionU
29 #define pmem_errormsg pmem_errormsgU
30 #endif
31
32 #endif
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 /*
39 * This limit is set arbitrary to incorporate a pool header and required
40 * alignment plus supply.
41 */
42 #define PMEM_MIN_PART ((size_t)(1024 * 1024 * 2)) /* 2 MiB */
43
44 /*
45 * flags supported by pmem_map_file()
46 */
47 #define PMEM_FILE_CREATE (1 << 0)
48 #define PMEM_FILE_EXCL (1 << 1)
49 #define PMEM_FILE_SPARSE (1 << 2)
50 #define PMEM_FILE_TMPFILE (1 << 3)
51
52 #ifndef _WIN32
53 void *pmem_map_file(const char *path, size_t len, int flags, mode_t mode,
54 size_t *mapped_lenp, int *is_pmemp);
55 #else
56 void *pmem_map_fileU(const char *path, size_t len, int flags, mode_t mode,
57 size_t *mapped_lenp, int *is_pmemp);
58 void *pmem_map_fileW(const wchar_t *path, size_t len, int flags, mode_t mode,
59 size_t *mapped_lenp, int *is_pmemp);
60 #endif
61
62 int pmem_unmap(void *addr, size_t len);
63 int pmem_is_pmem(const void *addr, size_t len);
64 void pmem_persist(const void *addr, size_t len);
65 int pmem_msync(const void *addr, size_t len);
66 int pmem_has_auto_flush(void);
67 void pmem_flush(const void *addr, size_t len);
68 void pmem_deep_flush(const void *addr, size_t len);
69 int pmem_deep_drain(const void *addr, size_t len);
70 int pmem_deep_persist(const void *addr, size_t len);
71 void pmem_drain(void);
72 int pmem_has_hw_drain(void);
73
74 void *pmem_memmove_persist(void *pmemdest, const void *src, size_t len);
75 void *pmem_memcpy_persist(void *pmemdest, const void *src, size_t len);
76 void *pmem_memset_persist(void *pmemdest, int c, size_t len);
77 void *pmem_memmove_nodrain(void *pmemdest, const void *src, size_t len);
78 void *pmem_memcpy_nodrain(void *pmemdest, const void *src, size_t len);
79 void *pmem_memset_nodrain(void *pmemdest, int c, size_t len);
80
81 #define PMEM_F_MEM_NODRAIN (1U << 0)
82
83 #define PMEM_F_MEM_NONTEMPORAL (1U << 1)
84 #define PMEM_F_MEM_TEMPORAL (1U << 2)
85
86 #define PMEM_F_MEM_WC (1U << 3)
87 #define PMEM_F_MEM_WB (1U << 4)
88
89 #define PMEM_F_MEM_NOFLUSH (1U << 5)
90
91 #define PMEM_F_MEM_VALID_FLAGS (PMEM_F_MEM_NODRAIN | \
92 PMEM_F_MEM_NONTEMPORAL | \
93 PMEM_F_MEM_TEMPORAL | \
94 PMEM_F_MEM_WC | \
95 PMEM_F_MEM_WB | \
96 PMEM_F_MEM_NOFLUSH)
97
98 void *pmem_memmove(void *pmemdest, const void *src, size_t len, unsigned flags);
99 void *pmem_memcpy(void *pmemdest, const void *src, size_t len, unsigned flags);
100 void *pmem_memset(void *pmemdest, int c, size_t len, unsigned flags);
101
102 /*
103 * PMEM_MAJOR_VERSION and PMEM_MINOR_VERSION provide the current version of the
104 * libpmem API as provided by this header file. Applications can verify that
105 * the version available at run-time is compatible with the version used at
106 * compile-time by passing these defines to pmem_check_version().
107 */
108 #define PMEM_MAJOR_VERSION 1
109 #define PMEM_MINOR_VERSION 1
110
111 #ifndef _WIN32
112 const char *pmem_check_version(unsigned major_required,
113 unsigned minor_required);
114 #else
115 const char *pmem_check_versionU(unsigned major_required,
116 unsigned minor_required);
117 const wchar_t *pmem_check_versionW(unsigned major_required,
118 unsigned minor_required);
119 #endif
120
121 #ifndef _WIN32
122 const char *pmem_errormsg(void);
123 #else
124 const char *pmem_errormsgU(void);
125 const wchar_t *pmem_errormsgW(void);
126 #endif
127
128 #ifdef __cplusplus
129 }
130 #endif
131 #endif /* libpmem.h */