]> git.proxmox.com Git - ceph.git/blame - ceph/src/pmdk/src/include/libpmem.h
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / src / include / libpmem.h
CommitLineData
a4b75251
TL
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
35extern "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
53void *pmem_map_file(const char *path, size_t len, int flags, mode_t mode,
54 size_t *mapped_lenp, int *is_pmemp);
55#else
56void *pmem_map_fileU(const char *path, size_t len, int flags, mode_t mode,
57 size_t *mapped_lenp, int *is_pmemp);
58void *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
62int pmem_unmap(void *addr, size_t len);
63int pmem_is_pmem(const void *addr, size_t len);
64void pmem_persist(const void *addr, size_t len);
65int pmem_msync(const void *addr, size_t len);
66int pmem_has_auto_flush(void);
67void pmem_flush(const void *addr, size_t len);
68void pmem_deep_flush(const void *addr, size_t len);
69int pmem_deep_drain(const void *addr, size_t len);
70int pmem_deep_persist(const void *addr, size_t len);
71void pmem_drain(void);
72int pmem_has_hw_drain(void);
73
74void *pmem_memmove_persist(void *pmemdest, const void *src, size_t len);
75void *pmem_memcpy_persist(void *pmemdest, const void *src, size_t len);
76void *pmem_memset_persist(void *pmemdest, int c, size_t len);
77void *pmem_memmove_nodrain(void *pmemdest, const void *src, size_t len);
78void *pmem_memcpy_nodrain(void *pmemdest, const void *src, size_t len);
79void *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
98void *pmem_memmove(void *pmemdest, const void *src, size_t len, unsigned flags);
99void *pmem_memcpy(void *pmemdest, const void *src, size_t len, unsigned flags);
100void *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
112const char *pmem_check_version(unsigned major_required,
113 unsigned minor_required);
114#else
115const char *pmem_check_versionU(unsigned major_required,
116 unsigned minor_required);
117const wchar_t *pmem_check_versionW(unsigned major_required,
118 unsigned minor_required);
119#endif
120
121#ifndef _WIN32
122const char *pmem_errormsg(void);
123#else
124const char *pmem_errormsgU(void);
125const wchar_t *pmem_errormsgW(void);
126#endif
127
128#ifdef __cplusplus
129}
130#endif
131#endif /* libpmem.h */