]> git.proxmox.com Git - ceph.git/blob - ceph/src/pmdk/src/rpmem_common/rpmem_fip_common.h
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / src / rpmem_common / rpmem_fip_common.h
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright 2016-2020, Intel Corporation */
3
4 /*
5 * rpmem_fip_common.h -- common definitions for librpmem and rpmemd
6 */
7
8 #ifndef RPMEM_FIP_COMMON_H
9 #define RPMEM_FIP_COMMON_H 1
10
11 #include <string.h>
12 #include <netinet/in.h>
13
14 #include <rdma/fabric.h>
15 #include <rdma/fi_cm.h>
16 #include <rdma/fi_rma.h>
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22 #define RPMEM_FIVERSION FI_VERSION(1, 4)
23 #define RPMEM_FIP_CQ_WAIT_MS 100
24
25 #define min(a, b) ((a) < (b) ? (a) : (b))
26 #define max(a, b) ((a) > (b) ? (a) : (b))
27
28 /*
29 * rpmem_fip_node -- client or server node type
30 */
31 enum rpmem_fip_node {
32 RPMEM_FIP_NODE_CLIENT,
33 RPMEM_FIP_NODE_SERVER,
34
35 MAX_RPMEM_FIP_NODE,
36 };
37
38 /*
39 * rpmem_fip_probe -- list of providers
40 */
41 struct rpmem_fip_probe {
42 unsigned providers;
43 size_t max_wq_size[MAX_RPMEM_PROV];
44 };
45
46 /*
47 * rpmem_fip_probe -- returns true if specified provider is available
48 */
49 static inline int
50 rpmem_fip_probe(struct rpmem_fip_probe probe, enum rpmem_provider provider)
51 {
52 return (probe.providers & (1U << provider)) != 0;
53 }
54
55 /*
56 * rpmem_fip_probe_any -- returns true if any provider is available
57 */
58 static inline int
59 rpmem_fip_probe_any(struct rpmem_fip_probe probe)
60 {
61 return probe.providers != 0;
62 }
63
64 int rpmem_fip_probe_get(const char *target, struct rpmem_fip_probe *probe);
65
66 struct fi_info *rpmem_fip_get_hints(enum rpmem_provider provider);
67
68 int rpmem_fip_read_eq_check(struct fid_eq *eq, struct fi_eq_cm_entry *entry,
69 uint32_t exp_event, fid_t exp_fid, int timeout);
70
71 int rpmem_fip_read_eq(struct fid_eq *eq, struct fi_eq_cm_entry *entry,
72 uint32_t *event, int timeout);
73
74 size_t rpmem_fip_cq_size(enum rpmem_persist_method pm,
75 enum rpmem_fip_node node);
76 size_t rpmem_fip_wq_size(enum rpmem_persist_method pm,
77 enum rpmem_fip_node node);
78 size_t rpmem_fip_rx_size(enum rpmem_persist_method pm,
79 enum rpmem_fip_node node);
80
81 size_t rpmem_fip_max_nlanes(struct fi_info *fi);
82
83 void rpmem_fip_print_info(struct fi_info *fi);
84
85 #ifdef __cplusplus
86 }
87 #endif
88
89 #endif