--- /dev/null
+/* SPDX-License-Identifier: BSD-3-Clause */
+/* Copyright 2019-2020, Intel Corporation */
+
+/*
+ * map.h -- internal definitions for libpmem2
+ */
+#ifndef PMEM2_MAP_H
+#define PMEM2_MAP_H
+
+#include <stddef.h>
+#include <stdbool.h>
+#include "libpmem2.h"
+#include "os.h"
+#include "source.h"
+#include "vm_reservation.h"
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int (*pmem2_deep_flush_fn)(struct pmem2_map *map,
+ void *ptr, size_t size);
+
+struct pmem2_map {
+ void *addr; /* base address */
+ size_t reserved_length; /* length of the mapping reservation */
+ size_t content_length; /* length of the mapped content */
+ /* effective persistence granularity */
+ enum pmem2_granularity effective_granularity;
+
+ pmem2_persist_fn persist_fn;
+ pmem2_flush_fn flush_fn;
+ pmem2_drain_fn drain_fn;
+ pmem2_deep_flush_fn deep_flush_fn;
+
+ pmem2_memmove_fn memmove_fn;
+ pmem2_memcpy_fn memcpy_fn;
+ pmem2_memset_fn memset_fn;
+
+ struct pmem2_source source;
+ struct pmem2_vm_reservation *reserv;
+};
+
+enum pmem2_granularity get_min_granularity(bool eADR, bool is_pmem,
+ enum pmem2_sharing_type sharing);
+struct pmem2_map *pmem2_map_find(const void *addr, size_t len);
+int pmem2_register_mapping(struct pmem2_map *map);
+int pmem2_unregister_mapping(struct pmem2_map *map);
+void pmem2_map_init(void);
+void pmem2_map_fini(void);
+
+int pmem2_validate_offset(const struct pmem2_config *cfg,
+ size_t *offset, size_t alignment);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* map.h */