]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pmdk/src/include/libpmem.h
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright 2014-2020, Intel Corporation */
5 * libpmem.h -- definitions of libpmem entry points
7 * This library provides support for programming with persistent memory (pmem).
9 * libpmem provides support for using raw pmem directly.
11 * See libpmem(7) for details.
17 #include <sys/types.h>
20 #include <pmemcompat.h>
23 #define pmem_map_file pmem_map_fileW
24 #define pmem_check_version pmem_check_versionW
25 #define pmem_errormsg pmem_errormsgW
27 #define pmem_map_file pmem_map_fileU
28 #define pmem_check_version pmem_check_versionU
29 #define pmem_errormsg pmem_errormsgU
39 * This limit is set arbitrary to incorporate a pool header and required
40 * alignment plus supply.
42 #define PMEM_MIN_PART ((size_t)(1024 * 1024 * 2)) /* 2 MiB */
45 * flags supported by pmem_map_file()
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)
53 void *pmem_map_file(const char *path
, size_t len
, int flags
, mode_t mode
,
54 size_t *mapped_lenp
, int *is_pmemp
);
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
);
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);
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
);
81 #define PMEM_F_MEM_NODRAIN (1U << 0)
83 #define PMEM_F_MEM_NONTEMPORAL (1U << 1)
84 #define PMEM_F_MEM_TEMPORAL (1U << 2)
86 #define PMEM_F_MEM_WC (1U << 3)
87 #define PMEM_F_MEM_WB (1U << 4)
89 #define PMEM_F_MEM_NOFLUSH (1U << 5)
91 #define PMEM_F_MEM_VALID_FLAGS (PMEM_F_MEM_NODRAIN | \
92 PMEM_F_MEM_NONTEMPORAL | \
93 PMEM_F_MEM_TEMPORAL | \
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
);
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().
108 #define PMEM_MAJOR_VERSION 1
109 #define PMEM_MINOR_VERSION 1
112 const char *pmem_check_version(unsigned major_required
,
113 unsigned minor_required
);
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
);
122 const char *pmem_errormsg(void);
124 const char *pmem_errormsgU(void);
125 const wchar_t *pmem_errormsgW(void);
131 #endif /* libpmem.h */