xref: /dpdk/drivers/common/mlx5/linux/mlx5_common_os.h (revision 391b8bcc81713d0da7e68eb39a64b00e69fc3543)
1*391b8bccSOphir Munk /* SPDX-License-Identifier: BSD-3-Clause
2*391b8bccSOphir Munk  * Copyright 2020 Mellanox Technologies, Ltd
3*391b8bccSOphir Munk  */
4*391b8bccSOphir Munk 
5*391b8bccSOphir Munk #ifndef RTE_PMD_MLX5_COMMON_OS_H_
6*391b8bccSOphir Munk #define RTE_PMD_MLX5_COMMON_OS_H_
7*391b8bccSOphir Munk 
8*391b8bccSOphir Munk #include <stdio.h>
9*391b8bccSOphir Munk 
10*391b8bccSOphir Munk #include <rte_pci.h>
11*391b8bccSOphir Munk #include <rte_debug.h>
12*391b8bccSOphir Munk #include <rte_atomic.h>
13*391b8bccSOphir Munk #include <rte_log.h>
14*391b8bccSOphir Munk #include <rte_kvargs.h>
15*391b8bccSOphir Munk #include <rte_devargs.h>
16*391b8bccSOphir Munk 
17*391b8bccSOphir Munk #include "mlx5_autoconf.h"
18*391b8bccSOphir Munk #ifdef HAVE_INFINIBAND_VERBS_H
19*391b8bccSOphir Munk #include <infiniband/verbs.h>
20*391b8bccSOphir Munk #endif
21*391b8bccSOphir Munk #ifdef HAVE_INFINIBAND_MLX5DV_H
22*391b8bccSOphir Munk #include <infiniband/mlx5dv.h>
23*391b8bccSOphir Munk #endif
24*391b8bccSOphir Munk 
25*391b8bccSOphir Munk /**
26*391b8bccSOphir Munk  * Get device name. Given an ibv_device pointer - return a
27*391b8bccSOphir Munk  * pointer to the corresponding device name.
28*391b8bccSOphir Munk  *
29*391b8bccSOphir Munk  * @param[in] dev
30*391b8bccSOphir Munk  *   Pointer to ibv device.
31*391b8bccSOphir Munk  *
32*391b8bccSOphir Munk  * @return
33*391b8bccSOphir Munk  *   Pointer to device name if dev is valid, NULL otherwise.
34*391b8bccSOphir Munk  */
35*391b8bccSOphir Munk static inline const char *
36*391b8bccSOphir Munk mlx5_os_get_dev_device_name(void *dev)
37*391b8bccSOphir Munk {
38*391b8bccSOphir Munk 	if (!dev)
39*391b8bccSOphir Munk 		return NULL;
40*391b8bccSOphir Munk 	return ((struct ibv_device *)dev)->name;
41*391b8bccSOphir Munk }
42*391b8bccSOphir Munk 
43*391b8bccSOphir Munk /**
44*391b8bccSOphir Munk  * Get ibv device name. Given an ibv_context pointer - return a
45*391b8bccSOphir Munk  * pointer to the corresponding device name.
46*391b8bccSOphir Munk  *
47*391b8bccSOphir Munk  * @param[in] ctx
48*391b8bccSOphir Munk  *   Pointer to ibv context.
49*391b8bccSOphir Munk  *
50*391b8bccSOphir Munk  * @return
51*391b8bccSOphir Munk  *   Pointer to device name if ctx is valid, NULL otherwise.
52*391b8bccSOphir Munk  */
53*391b8bccSOphir Munk static inline const char *
54*391b8bccSOphir Munk mlx5_os_get_ctx_device_name(void *ctx)
55*391b8bccSOphir Munk {
56*391b8bccSOphir Munk 	if (!ctx)
57*391b8bccSOphir Munk 		return NULL;
58*391b8bccSOphir Munk 	return ((struct ibv_context *)ctx)->device->name;
59*391b8bccSOphir Munk }
60*391b8bccSOphir Munk 
61*391b8bccSOphir Munk /**
62*391b8bccSOphir Munk  * Get ibv device path name. Given an ibv_context pointer - return a
63*391b8bccSOphir Munk  * pointer to the corresponding device path name.
64*391b8bccSOphir Munk  *
65*391b8bccSOphir Munk  * @param[in] ctx
66*391b8bccSOphir Munk  *   Pointer to ibv context.
67*391b8bccSOphir Munk  *
68*391b8bccSOphir Munk  * @return
69*391b8bccSOphir Munk  *   Pointer to device path name if ctx is valid, NULL otherwise.
70*391b8bccSOphir Munk  */
71*391b8bccSOphir Munk 
72*391b8bccSOphir Munk static inline const char *
73*391b8bccSOphir Munk mlx5_os_get_ctx_device_path(void *ctx)
74*391b8bccSOphir Munk {
75*391b8bccSOphir Munk 	if (!ctx)
76*391b8bccSOphir Munk 		return NULL;
77*391b8bccSOphir Munk 
78*391b8bccSOphir Munk 	return ((struct ibv_context *)ctx)->device->ibdev_path;
79*391b8bccSOphir Munk }
80*391b8bccSOphir Munk 
81*391b8bccSOphir Munk /**
82*391b8bccSOphir Munk  * Get umem id. Given a pointer to umem object of type
83*391b8bccSOphir Munk  * 'struct mlx5dv_devx_umem *' - return its id.
84*391b8bccSOphir Munk  *
85*391b8bccSOphir Munk  * @param[in] umem
86*391b8bccSOphir Munk  *    Pointer to umem object.
87*391b8bccSOphir Munk  *
88*391b8bccSOphir Munk  * @return
89*391b8bccSOphir Munk  *    The umem id if umem is valid, 0 otherwise.
90*391b8bccSOphir Munk  */
91*391b8bccSOphir Munk static inline uint32_t
92*391b8bccSOphir Munk mlx5_os_get_umem_id(void *umem)
93*391b8bccSOphir Munk {
94*391b8bccSOphir Munk 	if (!umem)
95*391b8bccSOphir Munk 		return 0;
96*391b8bccSOphir Munk 	return ((struct mlx5dv_devx_umem *)umem)->umem_id;
97*391b8bccSOphir Munk }
98*391b8bccSOphir Munk #endif /* RTE_PMD_MLX5_COMMON_OS_H_ */
99